在 Azure ServiceBus 上使用 MassTransit 时如何在 saga 中使用指定主题
How to use a specified topic in a saga when using MassTransit on Azure ServiceBus
我希望针对特定传奇的所有消息都发生在同一主题上。
我的 saga 是这样设置的:
public void ConfigureServices(IServiceCollection services)
{
services.AddMassTransit(x =>
{
var machine = new MyStateMachine();
var repository = new InMemorySagaRepository<MyState>();
x.UsingAzureServiceBus((ctx,cfg) => {
cfg.Host(config.ServiceBusConnectionString);
cfg.SubscriptionEndpoint("mySub", "myTopic", e =>
{
e.StateMachineSaga(machine, repository);
});
});
});
}
在状态机中我这样做:
Initially(
When(FirstEvent)
.PublishAsync(context => context.Init<SecondMessage>(new { TestParam = "test"}))
.TransitionTo(FirstState));
我希望在主题 'myTopic' 上发布 SecondMessage,但 MassTransit 为此消息创建了一个新主题。
MassTransit 为每种消息类型创建一个主题,并将消息发布到相应的主题。不建议将相同的主题名称分配给多种消息类型。
如果您想为 saga 使用订阅端点,则需要为每个事件在相应主题上配置 saga。默认情况下,MassTransit 会将每个 saga 事件的消息主题转发到接收端点队列。
示例拓扑如下所示:
我希望针对特定传奇的所有消息都发生在同一主题上。
我的 saga 是这样设置的:
public void ConfigureServices(IServiceCollection services)
{
services.AddMassTransit(x =>
{
var machine = new MyStateMachine();
var repository = new InMemorySagaRepository<MyState>();
x.UsingAzureServiceBus((ctx,cfg) => {
cfg.Host(config.ServiceBusConnectionString);
cfg.SubscriptionEndpoint("mySub", "myTopic", e =>
{
e.StateMachineSaga(machine, repository);
});
});
});
}
在状态机中我这样做:
Initially(
When(FirstEvent)
.PublishAsync(context => context.Init<SecondMessage>(new { TestParam = "test"}))
.TransitionTo(FirstState));
我希望在主题 'myTopic' 上发布 SecondMessage,但 MassTransit 为此消息创建了一个新主题。
MassTransit 为每种消息类型创建一个主题,并将消息发布到相应的主题。不建议将相同的主题名称分配给多种消息类型。
如果您想为 saga 使用订阅端点,则需要为每个事件在相应主题上配置 saga。默认情况下,MassTransit 会将每个 saga 事件的消息主题转发到接收端点队列。
示例拓扑如下所示: