zeromq パブリッシャー (ワーカーで NetMQ を使用) にサブスクライブし、メッセージを Azure テーブルに格納する単純な 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))
{