我正在构建一个简单的 Azure 工作者角色来订阅 zeromq 发布者(在工作者中使用 NetMQ)并将消息存储到 Azure 表中。
当我在我的开发机器上运行工作程序时,一切正常。消息进来并被写入表中。
但是,当我将工作人员部署到 Azure 时,某些东西会停止工作。我可以附加到工作人员并看到它卡在阻塞的subscriberSocket.Receive() 调用上。从工作人员的角度来看,订阅套接字不会出现任何消息。
我已经对工作人员进行了 RDP,并使用 netstat 我可以看到从订阅套接字到远程发布者的传出连接已建立,因此它看起来不像是防火墙问题。
从日志/诊断信息来看,一切似乎都很正常,只是没有收到任何消息。
我错过了一些 Azure 配置吗?允许传出连接但阻止数据通过的东西?
工人代码的相关部分:
private async Task RunAsync(CancellationToken cancellationToken)
{
Trace.TraceInformation("Running Task.");
using (var eDDNcontext = NetMQContext.Create())
using (var subscriberSocket = eDDNcontext.CreateSubscriberSocket())
{
Trace.TraceInformation("Subscribing to EDDN.");
var endpoint = GetEndpoint("EDDNEndpoint");
subscriberSocket.Connect("tcp://eddn-relay.elite-markets.net:9500");
subscriberSocket.Subscribe(String.Empty);
while (!cancellationToken.IsCancellationRequested)
{
Byte[] rawMessage = subscriberSocket.Receive(); //Azure deployment gets stuck on this blocking call.
if (rawMessage.Length < 3) continue;
using (MemoryStream memoryStream = new MemoryStream(rawMessage))
{
//Read past the first two bytes of the zlib header.
memoryStream.Seek(2, SeekOrigin.Begin);
using (DeflateStream deflateStream = new DeflateStream(memoryStream, CompressionMode.Decompress))
using (StreamReader reader = new StreamReader(deflateStream, Encoding.UTF8))
{