我正在构建一个简单的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))
{