小编Mat*_*ett的帖子

是否可以在RMQ .NET中指定多个连接点?

正如标题所述,我想为RMQ .NET提供多个URI ConnectionFactory,希望它能自动故障转移到第一个可用的URI,而不是仅限于一个URI.

建立

使用Docker Quickstart终端(Docker Toolbox的一部分)我创建了四个容器,每个容器都在运行它的RMQ实例上.我已按如下方式对RMQ节点进行了聚类:

  • 下游(node1和node2)
  • 上游(node3和node4)

所述下游节点共享一个联合队列与所述上游节点,以增加吞吐量.

使用

我在C#中编写了一个简单的控制台应用程序,它将生成消息并将消息发布到node4(主要上游RMQ实例).

我想测试RMQ配置的冗余/自动故障转移,因为我已经为AutomaticRecoveryEnabled(docs)和TopologyRecoveryEnabled(docs)设置了标志并设置了联合队列.

但是,ConnectionFactoryRMQ .NET库提供的内容似乎不支持指定多个URI(docs).所以我不得不手动编写节点切换时处理节点之间的切换 - 我这样做是通过捕获节点不再可访问时抛出的异常然后ping所有节点来查看哪些节点是活动的.

有没有办法为ConnectionFactory提供多个Rabbit端点,以便它可以自动进行故障转移?

c# rabbitmq

5
推荐指数
1
解决办法
871
查看次数

ASP.NET Core 集成测试在本地工作但在生产环境中运行时抛出空引用异常

我有一个 ASP.NET Core 2.2 Razor Pages Web 应用程序,我已经为遵循官方指南编写了一些集成测试。

我可以使用dotnet testVisual Studio 中内置的测试运行器在本地运行测试。但是,在构建服务器(Azure DevOps Hosted 2017 代理)上,测试将返回 500 错误。我认为这可能与Scott Hanselman 的指南中所述的用户机密有关,但即使在实施了他的一些建议修复程序之后,我仍然遇到相同的错误(我认为我不需要所有这些修复程序):

  • 添加builder.AddUserSecrets<Startup>();到启动。
  • 实施了一个CustomWebApplicationFactory将环境设置为“开发” - 下面的代码将此作为“生产”来重现失败。

我还根据本指南进行了理智检查,该指南更侧重于控制器,但由于我在此阶段只关心响应代码,因此它符合我的目的。我已经下载了详细的日志,但它们没有说明这个问题。

我的代码如下:

自定义WebApplicationFactory:

using Microsoft.AspNetCore.Authentication.AzureAD.UI;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection;

namespace WebPortal.Int.Tests
{
    /// <summary>
    /// Based on https://fullstackmark.com/post/20/painless-integration-testing-with-aspnet-core-web-api
    /// </summary>
    public class CustomWebApplicationFactory<TStartup> : WebApplicationFactory<Startup> where TStartup : class
    {
        public CustomWebApplicationFactory() { }

        protected override …
Run Code Online (Sandbox Code Playgroud)

c# integration-testing azure-devops asp.net-core

5
推荐指数
1
解决办法
3419
查看次数

ES6何时使用String.raw而不是默认模板文字

我正在尝试连接一堆字符串以在Javascript中构建查询字符串.以前我通过丑陋的字符串连接实现了这个目的:

var queryString = "?action=" + actionValue + "&data=" + dataValue";
Run Code Online (Sandbox Code Playgroud)

但是使用ES6,我发现有一些新方法可以帮助我用更好看的代码实现相同的结果,比如C#6中的字符串插值:

string s = $"action={actionValue}&data={dataValue}"
Run Code Online (Sandbox Code Playgroud)

我已经使用默认模板文字进行了测试,String.raw虽然每个模板的语法略有不同,但它们都有效.我倾向于String.raw在我的最终副本中使用,因为它不允许对字符串进行标记,因此将来会像默认模板文字一样进行修改.

虽然它确实在MDN文档中String.raw基本上调用默认模板文字方法,但我喜欢String.raw更好的语法...我在String.join我的字符串的花括号内调用我正在格式化的方法,所以也许这是一个误用String.raw.

是否有任何ES6向导可以启发我并提供一个优于另一个的理由?

我的代码:

var defaultTemplateStringUrl = `@Url.Action("DownloadMultiple")?inIds=${inData.join(',')}&outIds=${outData.join(',')}&truckId=${truckId}`;
var rawStringUrl = String.raw `@Url.Action("DownloadMultiple")?inIds=${inData.join(',')}&outIds=${outData.join(',')}&truckId=${truckId}`;

window.open( /*url goes here*/);
Run Code Online (Sandbox Code Playgroud)

javascript string ecmascript-6

4
推荐指数
1
解决办法
509
查看次数

Docker 构建无法解析 Windows Server 2019 上的 DNS

问题

运行以下命令:

docker build  --rm -f "c:\Users\...\iotedgeModbus\Dockerfile.amd64.debug" -t
modbus:dev-amd64.debug "c:\Users\...\iotedgeModbus" ; if ($?) { iotedgehubdev start -d "c:\Users\...\iotedgeModbus\config\deployment.debug.amd64.json" -v }
Run Code Online (Sandbox Code Playgroud)

输出与解析 DNS 名称相关的错误:

Step 2/21 : RUN apt-get update &&     apt-get install -y --no-install-recommends unzip procps
&&     rm -rf /var/lib/apt/lists/*
 ---> Running in a389a7d1ff0d
Err:1 http://security.debian.org/debian-security buster/updates InRelease
  Temporary failure resolving 'security.debian.org'
Err:2 http://deb.debian.org/debian buster InRelease
  Temporary failure resolving 'deb.debian.org'
Err:3 http://deb.debian.org/debian buster-updates InRelease
  Temporary failure resolving 'deb.debian.org'
Reading package lists...
Run Code Online (Sandbox Code Playgroud)

完整的堆栈跟踪:

docker build  --rm -f "c:\Users\...\iotedgeModbus\Dockerfile.amd64.debug" -t
modbus:dev-amd64.debug "c:\Users\...\iotedgeModbus" …
Run Code Online (Sandbox Code Playgroud)

dns azure docker docker-ee windows-server-2019

3
推荐指数
1
解决办法
2982
查看次数

DateTime类作为秒表

我的学校项目是用一个按钮启动/停止来开始计算时间,然后再点击停止计算时间.当我使用这3行

txtVrijeme.Text = Convert.ToString(sada.AddSeconds(i).ToString("HH:mm:ss"));
Thread.Sleep(1000);
i++;
Run Code Online (Sandbox Code Playgroud)

在形式apk中没有循环(while,for,goto等).它工作(显示00:00:00,如果我再次点击00:00:01)但是当我使用循环它不显示任何东西.为什么?顺便说一句.控制台应用程序使用此代码没有任何问题(在控制台中循环)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Bradi?i?ManuelŠtoperica
{
    public partial class Form1 : Form
    {
        DateTime sada = new DateTime(2009, 6, 22, 0, 0, 0);
        int i = 0;
        bool x = true;

        public Form1()
        {
            InitializeComponent();                
        }

        void execute(bool y)
        {

            while (y == true)
             {
                txtVrijeme.Text = Convert.ToString(sada.AddSeconds(i).ToString("HH:mm:ss"));
                Thread.Sleep(1000);
                i++;
            }
        }


        private void btnStartStop_Click(object sender, …
Run Code Online (Sandbox Code Playgroud)

c# datetime

-1
推荐指数
1
解决办法
70
查看次数