![](/img/trans.png)
[英]MassTransit. Kafka. How to produce message from saga state machine, during message processing
[英](Masstransit Saga with MultiBus) How can i publish message to another bus from Saga?
來自是否有可能讓 MassTransit Saga 對來自不止一個總線(多總線)的事件做出反應?
我嘗試將 saga 與多總線一起使用。 但是當我將ISecondBus
注入 Saga 時。 出了點問題。 我的程序卡住了。
public class TestSaga : MassTransitStateMachine<TestState>
{
public TestSaga(ISecondBus secondBus)
{
if (secondBus is null)
{
throw new ArgumentNullException(nameof(secondBus));
}
}
}
程序.cs
services.AddMassTransit(x =>
{
x.AddSagaStateMachine<TestSaga, TestState>()
.RedisRepository(redisCfg =>
{
redisCfg.DatabaseConfiguration("127.0.0.1:6379,password=");
});
x.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.Host("rabbitmq://127.0.0.1:5672/A", hostConfig =>
{
hostConfig.Username("xxxx");
hostConfig.Password("xxxx");
});
cfg.ReceiveEndpoint("some-queue", e =>
{
e.PrefetchCount = 1;
e.UseInMemoryOutbox();
e.ConfigureSaga<TestState>(provider);
});
}));
});
services.AddMassTransit<ISecondBus>(x =>
{
x.AddSagaStateMachine<TestSaga, TestState>()
.RedisRepository(redisCfg =>
{
redisCfg.DatabaseConfiguration("127.0.0.1:6379,password=");
});
x.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.Host("rabbitmq://127.0.0.1:5672/B", hostConfig =>
{
hostConfig.Username("xxx");
hostConfig.Password("xxx");
});
cfg.ReceiveEndpoint("some-queue", e =>
{
e.PrefetchCount = 1;
e.UseInMemoryOutbox();
e.ConfigureSaga<TestState>(provider);
});
}));
});
您不能將運行時依賴項注入 saga state 機器。 如果你想從 state 機器發布到另一條總線,你需要創建一個自定義活動並從你的 state 機器行為中調用它。
https://masstransit-project.com/usage/sagas/automatonymous.html#custom
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.