服务端点未收到已发布的事件
Service endpoint not receiving published events
我终于开始将我的解决方案部署到我们的开发环境,但我 运行 遇到了一个问题,即我的端点没有接收到已发布的事件。这确实在我的本地机器上有效,但在远程服务器之间聊天时无效。
编辑
我也是 运行 作为网络服务的 windows 服务,rebus 日志记录工作正常。
这是我的配置设置:
出版商
Configure.With(new SimpleInjectorContainerAdapter(container))
.Transport(t => t.UseMsmq("Identity.Web"))
.Subscriptions(s => s.StoreInSqlServer("Integration", "Subscription", true, true))
.Options(b => b.EnableMessageAuditing("Identity.Web.Audit"))
.Options(b => b.SimpleRetryStrategy(errorQueueAddress: "Identity.Web.Error"))
.Start();
端点接收器
var bus = Configure.With(new CastleWindsorContainerAdapter(container))
.Transport(t => t.UseMsmq("Comply360.User.Management"))
.Subscriptions(s => s.StoreInSqlServer("Integration", "Subscription", isCentralized: true))
.Options(b => b.EnableMessageAuditing("Comply360.User.Management.Audit"))
.Options(b => b.SimpleRetryStrategy(errorQueueAddress: "Comply360.User.Management.Error"))
.Logging(l => l.Serilog(Log.Logger))
.Start();
bus.Subscribe<UserCreated>();
bus.Subscribe<UserUpdated>();
发布代码如下:
await this.bus.Publish(new Events.UserUpdated
{
UserId = notification.Id,
Firstname = notification.Firstname,
Lastname = notification.Lastname,
});
以及我的订阅商店中的两条记录:
Identity.Events.UserCreated, Identity.Messages Comply360.User.Management@MACHINE
Identity.Events.UserUpdated, Identity.Messages Comply360.User.Management@MACHINE
如有任何帮助,非常感谢!
我注意到您在未等待结果的情况下致电 bus.Subscribe<TEvent>()
。你应该总是
await bus.Subscribe<TEvent>();
如果您使用的是 async
方法,或者
bus.Subscribe<TEvent>().Wait();
如果你不是。
但是我不认为那是你的问题的原因。
我可以看到你在发布时 await
正确 - 很好 :)
我怀疑这是 MSMQ 和队列权限的问题。您能否尝试转到“计算机管理”并查看发布者计算机上的事务性死信队列?
如果消息已发送,但由于某些问题(网络问题、用户权限问题等)而未到达收件人,它们将最终进入事务性死信队列。
我在 functionapp 和 EventHub 上工作时遇到了同样的问题。
FunctionApp 的 pre-warned 个实例数应比 EventHub 分区数 equal/grater 个。更改此配置后,我即将完美地获得所有事件。
我终于开始将我的解决方案部署到我们的开发环境,但我 运行 遇到了一个问题,即我的端点没有接收到已发布的事件。这确实在我的本地机器上有效,但在远程服务器之间聊天时无效。
编辑 我也是 运行 作为网络服务的 windows 服务,rebus 日志记录工作正常。
这是我的配置设置:
出版商
Configure.With(new SimpleInjectorContainerAdapter(container))
.Transport(t => t.UseMsmq("Identity.Web"))
.Subscriptions(s => s.StoreInSqlServer("Integration", "Subscription", true, true))
.Options(b => b.EnableMessageAuditing("Identity.Web.Audit"))
.Options(b => b.SimpleRetryStrategy(errorQueueAddress: "Identity.Web.Error"))
.Start();
端点接收器
var bus = Configure.With(new CastleWindsorContainerAdapter(container))
.Transport(t => t.UseMsmq("Comply360.User.Management"))
.Subscriptions(s => s.StoreInSqlServer("Integration", "Subscription", isCentralized: true))
.Options(b => b.EnableMessageAuditing("Comply360.User.Management.Audit"))
.Options(b => b.SimpleRetryStrategy(errorQueueAddress: "Comply360.User.Management.Error"))
.Logging(l => l.Serilog(Log.Logger))
.Start();
bus.Subscribe<UserCreated>();
bus.Subscribe<UserUpdated>();
发布代码如下:
await this.bus.Publish(new Events.UserUpdated
{
UserId = notification.Id,
Firstname = notification.Firstname,
Lastname = notification.Lastname,
});
以及我的订阅商店中的两条记录:
Identity.Events.UserCreated, Identity.Messages Comply360.User.Management@MACHINE
Identity.Events.UserUpdated, Identity.Messages Comply360.User.Management@MACHINE
如有任何帮助,非常感谢!
我注意到您在未等待结果的情况下致电 bus.Subscribe<TEvent>()
。你应该总是
await bus.Subscribe<TEvent>();
如果您使用的是 async
方法,或者
bus.Subscribe<TEvent>().Wait();
如果你不是。
但是我不认为那是你的问题的原因。
我可以看到你在发布时 await
正确 - 很好 :)
我怀疑这是 MSMQ 和队列权限的问题。您能否尝试转到“计算机管理”并查看发布者计算机上的事务性死信队列?
如果消息已发送,但由于某些问题(网络问题、用户权限问题等)而未到达收件人,它们将最终进入事务性死信队列。
我在 functionapp 和 EventHub 上工作时遇到了同样的问题。 FunctionApp 的 pre-warned 个实例数应比 EventHub 分区数 equal/grater 个。更改此配置后,我即将完美地获得所有事件。