对于我工作的公司,我们希望使用RabbitMQ作为我们的主要消息总线.我们的想法是每个应用程序都使用自己的vhost进行内部通信,通过铲子或联合插件,我们可以跨多个vhosts共享某些类型的事件(甚至可能是多台机器(非群集)) .我们选择每个vhost的应用程序将内部通信与公共事件分开,并保持每个应用程序的安全性可调.
基于在RabbitMQ网站上发布的信息,当我不得不选择铲子或者我必须选择联合插件时,我不会得到它.
RabbitMQ具有以下说明何时使用:
通常,当您需要比联合提供的更多控制时,您可以使用铲子在互联网上链接经纪人.
当我选择联邦时,我所缺少的铲子中的细粒控制是什么?
此时我想我更喜欢联合插件,因为我可以通过联合插件提供的REST API自动进行vhost间通信.在铲子的情况下,我需要更改铲子配置并在每次我们想要在vhost之间共享事件时重新启动RabbitMQ实例.我的想法是否正确?
我们目前在Windows上运行RMQ,客户端从.NET连接.在不久的将来,Java/Perl/PHP客户端将加入.
总结一下我的问题:
我有以下代码片段:
var url ="https://localhost/Sensor/Sensors/Whitelist";
var cerX509 = new X509Certificate2(@"c:\Client.pfx", "PASSWORD");
var messageHandler = new WebRequestHandler();
messageHandler.ClientCertificateOptions = ClientCertificateOption.Manual;
messageHandler.ClientCertificates.Add(cerX509);
var message = new HttpRequestMessage(HttpMethod.Get, url);
var httpClient = new HttpClient(messageHandler);
Run Code Online (Sandbox Code Playgroud)
我想弄清楚为什么当我打电话时我的客户端证书没有被发送到服务器httpClient.SendAsync(message),我收到了 401。
当我用httpClient.GetAsync(url)正在发送的证书替换呼叫时。
我可以控制服务器端代码,当我使用时,httpClient.GetAsync我可以检索证书
X509Certificate2 certificate = request.GetClientCertificate();
Run Code Online (Sandbox Code Playgroud)
当我使用httpClient.SendAsync(message)方法调用request.GetClientCertificate()返回null。
为什么 SendAsync 不发送证书?