问题标签 [rebus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
306 浏览

rebus - 如何处理来自输入队列的已发布消息并将其发布到远程端点?

我目前将 rebus 配置为将MyMessages程序集中的所有消息定向到流程管理器输入队列。假设在 MyMessage 程序集中我有一条名为SomethingHappened的消息,它将用于触发流程管理器中的其他操作(例如DoSomethingElse)。但是,我还想在本地(在同一个队列中)订阅SomethingHappened以更新数据库。因此工作流程将如下所示:

  1. 用户在 UI 中触发动作DoSomething
  2. DoSomething的处理程序更新对象状态并在内部发布事件SomethingHappened(在内存中收集未提交的事件)
  3. 通过遍历对象中所有未提交的事件,通过 rebus 将SomethingHappened事件发布到队列
  4. 在本地处理发生的事情以更新数据库
  5. 通过saga远程处理SomethingHappened以触发SomethingElseHappened

这可以在rebus中配置吗?

我目前拥有的 rebus 配置:

谢谢你

0 投票
1 回答
58 浏览

rebus - rebus的最低访问要求是什么?

作为安全考虑的一部分,我们手动创建了 msmq 队列,而不是依赖于 rebus 的自动队列创建。那么 rebus 队列的最小队列访问权限是多少?

完全控制真的有必要吗?

谢谢

0 投票
1 回答
551 浏览

rebus - 在rebus中发布的一种方式?

通过阅读 wiki 中的移交工作部分,您似乎可以使用单向模式在 rebus 中进行单向发布。但我认为单向模式只允许 bus.send?

如果在一个场景中,我有两个应用程序都可以发布SomethingHappened消息,但只有一个应用程序应该处理来自 ProcessManager 的回复,例如DoSomethingElse,我应该如何为两个应用程序配置 rebus?

问候

0 投票
1 回答
619 浏览

rebus - 无论如何要调试/记录消息队列事务?

我有一个程序当前抛出MSMQ 事务尚未启动。如果使用此事务发送而没有任何警告或异常,MSQM 将把消息扔到死信队列中!例外。我不确定我做错了什么,所以无论如何要调试/记录消息队列事务的当前状态?

基本上,我目前得到:

0 投票
1 回答
367 浏览

rebus - Rebus HTTP 网关和 MSMQ 健康状态

假设我们有

  • 具有 HTTP 网关出站服务的客户端节点
  • 具有 HTTP 网关入站服务的服务器节点

我考虑了 MSMQ 本身由于某种原因在客户端节点上停止的情况。在当前实现中,Rebus HTTP 网关将捕获异常。

您如何看待 MessageQueueException 异常不仅可以捕获,还可以发送到服务器节点并放入错误队列的想法?(错误队列的名称可以从标题中收集)

因此,如果没有额外的基础设施,服务器就会知道客户端有问题,因此有人可以做出反应。

更新:

我猜答案中描述的问题会被提出。我应该更深入地解释我的情况:) 抱歉。这里是:

我将以 InboundService 能够同时执行的方式修改 HTTP 网关 - 发送和接收消息。因此,OutboundService 将是唯一一个发起连接(定期,例如每 5 分钟一次)以便从服务器获取新消息并将其消息发送到服务器的人。这是因为客户端节点不被视为服务器,而是被视为位于 NAT 后面的众多客户端之一。

实际上,服务器本身对客户端健康不感兴趣,但我虽然不是在客户端创建单独的警报服务来使用HTTP 网关HTTP 网关代码,而是 HTTP 网关 itelf 可以做到这一点,因为它完全符合 HTTP 网关的业务边跑。

如果客户端根本无法访问服务器怎么办?

由于 MSMQ 会死,我考虑过使用像http://ayende.com/blog/4540/building-a-managed-persistent-transactional-queue这样的进程内独立持久队列对象 (只是一个示例实现,我不确定它有什么样的许可证)在客户端聚合异常,直到服务器可以访问。

客户端多久通知一次发生错误的服务器?

我不确定那部分 - 我认为它可能与消息同步的预定时间有关,例如每 5 分钟一次,但是如果没有像当前实现中的预定时间(while(true) 循环)怎么办?也许它可以由配置设置?

我喜欢有一个关于处理错误的一致策略,这通常涉及普通的旧 NLog 日志记录

由于客户端节点将位于 Internet 后面,因此 NAT 标准监控技术将不起作用。我考虑过使用队列作为 NLog 传输,但由于 MSMQ 将死,它不会工作。

我还考虑过使用 HTTP 作为 NLog 传输,但在服务器端它需要队列(不是真的,但我想将它存储在队列中)所以我们回到 sbus 和 HTTP 网关......那种 NLog 传输将是 HTTP 网关的事实上的克隆。

UPDATE2: HTTP 作为 NLog 传输(我的意思是目标传输)也需要客户端队列,就像我在“如果客户端根本无法到达服务器怎么办?”中描述的那样。部分。它将是嵌入到 NLog 中的 HTTP 网关的克隆。疯狂:)

所有的事情是客户端是不可靠的,所以我想在服务器端拥有关于客户端的所有信息并在那里登录。

更新3

替代解决方案可能是创建单独的服务,但它是 HTTP 网关的一部分(例如 OutboundAlertService)。然后将实现三个目标:

  • 共享发送循环代码
  • 无需额外的服务器基础架构
  • 对 OutboundService 没有负面影响(没有向其中添加进程内队列的复杂性)

它不会从 OutboundService 中获取异常,而是会定期检查 MSMQ 本身。


然而,其他替代解决方案将简单地使用 MSMQ 队列以外的其他队列作为 NLog 目标,但这是丑陋的矫枉过正。

0 投票
1 回答
240 浏览

rebus - Rebus HTTP 网关如何确认消息传递

我想问一下 Rebus HTTP Gateway 如何确认消息传递,所以当 OutboundService 发送消息时它如何知道它可以提交或回滚事务。

直观的答案是 HTTP 响应承认它但是查看代码

https://github.com/rebus-org/Rebus/blob/5fef6b400feaf569e0d6517ad9ee3f6da2f31820/src/Rebus.HttpGateway/Outbound/OutboundService.cs#L139

阅读回复后似乎没有采取任何行动。

提前致谢 :)

0 投票
1 回答
282 浏览

rebus - Rebus 文件系统消息队列

我发现 Rebus 包含 FileSystemMessageQueue。这似乎太棒了,所以我想问一些关于它的问题:)

  1. 它是线程安全/进程安全的吗

  2. 是事务性的

  3. 为什么它使用 JSON 作为序列化格式(与二进制序列化程序相比,它不会增加 POCO 的限制吗?)

  4. 它可以在没有总线的情况下单独工作吗?(就像单独的 dll,而不是服务)

  5. 对于少量消息,是否可以替代MSMQ?我的意思是,如果我们谈论本地(非网络)而不是资源密集型消息传递,它如何与 MSMQ 进行比较?它会和 MSMQ 一样好吗?

提前致谢

0 投票
2 回答
873 浏览

c# - ReBus 相当于 NServiceBus Saga ReplyToOriginator

我正在与 ReBus 中的 Sagas 合作,根据我使用 NServiceBus 的经验,您可以回复 Saga 的原始创建者以提供更新,如下所示:

我没有看到使用 ReBus 的等效方法。有没有办法做到这一点,如果没有什么是好的模式(除了发起者轮询),我可以使用它来实现同样的目标?一个例子是尝试创建一个客户,而客户想知道它是什么时候创建的,然后再尝试更改它的地址。

这是我快速整理的客户场景的一个简单示例:

0 投票
1 回答
306 浏览

autofac - 使用 AutoFac 注册对象

我正在使用 Rebus。在 AutofacContainerAdapter ( https://github.com/rebus-org/Rebus/blob/master/src/Rebus.Autofac/AutofacContainerAdapter.cs ) 他们正在调用以下代码行:

如何设置我的 MessageHandler 构造函数以便 Autofac 可以找到这种类型?如果我理解正确,当我IMessageContext在构造函数中使用时,它不会被传递,因为.As<IMessageContext>()上面的代码中没有。

0 投票
1 回答
486 浏览

c# - 在巴士开始或停止时清除队列

Rebus 上是否有配置设置来清除总线启动或关闭时的队列?我需要这样做的原因是我为我的集成测试运行了两个 Rebus 实例,如果测试失败,我不希望在后续测试运行中重试失败的消息。

这是我为发送消息的集成测试客户端所拥有的。请注意,RebusHost 只是被测系统的包装器: