正如标题所述,我想为RMQ .NET提供多个URI ConnectionFactory
,希望它能自动故障转移到第一个可用的URI,而不是仅限于一个URI.
建立
使用Docker Quickstart终端(Docker Toolbox的一部分)我创建了四个容器,每个容器都在运行它的RMQ实例上.我已按如下方式对RMQ节点进行了聚类:
所述下游节点共享一个联合队列与所述上游节点,以增加吞吐量.
使用
我在C#中编写了一个简单的控制台应用程序,它将生成消息并将消息发布到node4(主要上游RMQ实例).
我想测试RMQ配置的冗余/自动故障转移,因为我已经为AutomaticRecoveryEnabled
(docs)和TopologyRecoveryEnabled
(docs)设置了标志并设置了联合队列.
但是,ConnectionFactory
RMQ .NET库提供的内容似乎不支持指定多个URI(docs).所以我不得不手动编写节点切换时处理节点之间的切换 - 我这样做是通过捕获节点不再可访问时抛出的异常然后ping所有节点来查看哪些节点是活动的.
有没有办法为ConnectionFactory提供多个Rabbit端点,以便它可以自动进行故障转移?
我有一个 ASP.NET Core 2.2 Razor Pages Web 应用程序,我已经为遵循官方指南编写了一些集成测试。
我可以使用dotnet test
Visual 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) 我正在尝试连接一堆字符串以在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) 运行以下命令:
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) 我的学校项目是用一个按钮启动/停止来开始计算时间,然后再点击停止计算时间.当我使用这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# ×3
asp.net-core ×1
azure ×1
azure-devops ×1
datetime ×1
dns ×1
docker ×1
docker-ee ×1
ecmascript-6 ×1
javascript ×1
rabbitmq ×1
string ×1