Ori*_*ter 4 c# masstransit azureservicebus azure-servicebus-topics
我尝试使用 MassTransit 将消息发布到eventsAzure 服务总线中命名的主题。我在配置 MassTransit 以使用我预定义的主题时遇到问题events,而是为消息类型创建了一个由命名空间/类名命名的新主题。所以我想知道如何指定使用哪个主题而不是创建一个新主题。
这是我测试过的代码:
using System;
using System.Threading.Tasks;
using MassTransit;
using MassTransit.AzureServiceBusTransport;
using Microsoft.ServiceBus;
namespace PublisherNameSpace
{
public class Publisher
{
public static async Task PublishMessage()
{
var topic = "events";
var bus = Bus.Factory.CreateUsingAzureServiceBus(
cfg =>
{
var azureServiceBusHost = cfg.Host(new Uri("sb://<busname>.servicebus.windows.net"), host =>
{
host.OperationTimeout = TimeSpan.FromSeconds(5);
host.TokenProvider =
TokenProvider.CreateSharedAccessSignatureTokenProvider(
"RootManageSharedAccessKey",
"<key>"
);
});
cfg.ReceiveEndpoint(azureServiceBusHost, topic, e =>
{
e.Consumer<TestConsumer>();
});
});
await bus.Publish<TestConsumer>(new TestMessage { TestString = "testing" });
}
}
public class TestConsumer : IConsumer<TestMessage>
{
public Task Consume(ConsumeContext<TestMessage> context)
{
return Console.Out.WriteAsync("Consuming message");
}
}
public class TestMessage
{
public string TestString { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
Sim*_*ess 10
接受的答案清除了订阅方:
cfg.SubscriptionEndpoint(
host,
"sub-1",
"my-topic-1",
e =>
{
e.ConfigureConsumer<TestConsumer>(provider);
});
Run Code Online (Sandbox Code Playgroud)
对于那些想知道如何在发布端正确获取总线配置的人,它应该如下所示:
cfg.Message<TestMessage>(x =>
{
x.SetEntityName("my-topic-1");
});
Run Code Online (Sandbox Code Playgroud)
然后你可以在总线上调用发布:
await bus.Publish<TestMessage>(message);
Run Code Online (Sandbox Code Playgroud)
感谢@ChrisPatterson向我指出这一点!
如果您想从特定主题消费,请创建订阅端点而不是接收端点,并在配置中指定主题和订阅名称。
最简单的形式如单元测试所示:
| 归档时间: |
|
| 查看次数: |
2442 次 |
| 最近记录: |