Azure Worker Role中的Netmq适用于开发计算机,但不适用于Azure

时间:2015-01-20 09:38:38

标签: azure zeromq azure-worker-roles netmq

我正在构建一个简单的Azure辅助角色来订阅zeromq Publisher(在worker中使用NetMQ)并将消息存储到Azure Tables中。

当我在开发机器上运行工作程序时,一切正常。消息进入并写入表中。

但是,当我将工作器部署到Azure时,某些东西停止工作。我可以附加到worker并看到它停留在阻塞的subscriberSocket.Receive()调用上。从工作者的角度来看,订阅套接字上没有任何消息出现。

我已经对工作人员和使用netstat进行了RDP我可以看到从订阅套接字到远程发布者的传出连接已建立,因此它看起来不像防火墙问题。

从日志/诊断信息中,一切似乎都是正常的,只是没有收到任何消息。

是否有一些我错过的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))
                    {

0 个答案:

没有答案