私はRebusを検討しており、Azure Service Busで使用しています。 Regalure Queuesでそれを使用するのは簡単でしたが、代わりにTopicを使用したい場合は、動作させることができません。AzureサービスバスでRebusでパブリッシュ/サブスクライブを処理する
セットアップが完了してトピック/サブスクリプションで使用されているものはありますか。これはこれまで私が持っていたものです。
static void Main(string[] args)
{
_bus1 = InitializeBus(System.Environment.MachineName);
_bus2 = InitializeBus(System.Environment.MachineName + "_2");
_bus3 = InitializeBus();
Run();
Console.WriteLine("Press Enter to exit!");
Console.ReadLine();
}
private static void Run()
{
try
{
_bus1.Handle<string>((b, c, m) => { Console.WriteLine(m); return null; });
_bus2.Handle<string>((b, c, m) => { Console.WriteLine(m); return null; });
_bus1.Bus.Subscribe<string>();
_bus2.Bus.Subscribe<string>();
_bus3.Bus.Publish("Publish test message");
}
catch (Exception ex)
{
throw;
}
}
private static BuiltinHandlerActivator InitializeBus(string queueName = null)
{
var activator = new BuiltinHandlerActivator();
if(string.IsNullOrEmpty(queueName))
Configure.With(activator)
.Transport(t => t.UseAzureServiceBusAsOneWayClient(connectionString))
.Options(o => { o.SetNumberOfWorkers(10); o.SetMaxParallelism(10); })
.Start();
else
Configure.With(activator)
.Transport(t => t.UseAzureServiceBus(connectionString, queueName).EnablePartitioning().DoNotCreateQueues())
.Options(o => { o.SetNumberOfWorkers(10); o.SetMaxParallelism(10); })
.Start();
return activator;
}
まず、すべてのバスを作成します。私はDontCreateQueues()を使用しています。なぜなら、キューは自分のルートに作成されて複製されるのではなく、トピックのサブスクリプションとしてのみ作成されるからです。 その後、私はバスをセットアップし、Publishは正常に動作します。作成された1つのトピックと、このトピックで作成された2つのサブスクリプションがあり、このサブスクリプションごとに1つのメッセージがあります。しかし、メッセージは決して収集されません。
コードの設定でDontCreateQueues()メソッドを削除したが、ルートキューブに2つのキューが作成され、トピックが2つありますが、そのようにはできません。
よろしく マグナス