问题标签 [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.
msmq - 我的中间层 MSMQ 队列真的有必要吗?
我的情况是这样的:
我有多个网络服务器:
- 需要与后端通信(
IBus.Publish/IBus.Subscribe
) - 需要相互交流(
IBus.Publish/IBus.Subscribe
)
除了网络服务器之外,我还有许多使用相同消息的 Windows 服务。
为了完成这项工作,我让网络服务器将消息发送到中央集线器,唯一的响应是将消息包装在新的消息类型中并将其发布给所有订阅者。
我能以某种方式避免这种情况,所以我可以直接从网络服务器发布消息吗?
编辑(添加了一些代码) - 当前情况:
通缉情况:
msmq - msmq 队列必须是事务性的吗?
我最近才开始使用 Rebus,并注意到它总是会创建事务性 msmq 队列,从而导致 HDD 的流量过大(0,5 - 5mb/sec)。这是故意的吗?可以做些什么来避免它吗?
c# - 自动向 Rebus 消息添加标头
配置 Rebus 总线时,您可以指定它应该按照此处Headers.UserName
所述查找标头。这允许您自动填充Thread.CurrentPrincipal
使用正确的用户名自动填充。这很好用,但我想知道是否有一种以标准方式设置标题的好方法,而不是在发送每条消息时手动设置它。
我正在构建一个基于 ASP.NET Web API 的服务,并希望每个请求都将标头设置为在apiControllerInstance.RequestContext.Principal.Identity.Name
.
一个不错的解决方案是在可以访问消息总线的基础上创建一个方法ApiController
,因此您可以执行以下操作:
问题是你必须记住这样做,所以我想得到一些关于如何以更一般的方式做到这一点的建议。此外,其他标头将来可能会变得相关,这也将是这种方法的问题。
更新
根据 mookid 的回答,我提出了以下解决方案(我刚刚验证它适用于我的一个请求,但我不承诺稳健性):
用法:
c# - Rebus 停止从 RabbitMQ 检索消息
我们的 Rebus/RabbitMQ 设置存在问题,Rebus 突然停止从 RabbitMQ 检索/处理消息。这在上个月发生了两次,我们不确定如何进行。
我们的 RabbitMQ 设置在不同的服务器上有两个节点,Rebus 端是一个 windows 服务。
我们在 Rebus 或运行 Rebus 的服务器上的事件日志中看不到任何错误。我们也没有在 RabbitMQ 服务器上看到错误。
当我们看到其他日志消息时,Rebus(和 Windows 服务)继续运行,例如 DueTimeOutSchedular 和 timeoutreplies。但是,工作线程似乎停止运行,但没有记录任何错误。
它会导致 RabbitMQ 输入队列不断增长 :(,我们正在添加日志记录来监控这一点,以便在再次发生时收到通知。
但我正在寻找有关如何继续“调查”的建议以及如何防止这种情况的想法。也许你们中的一些人以前经历过这种情况?
更新 似乎我们确实有一个节点崩溃,至少在上次发生时。RabbitMQ master 节点崩溃(服务器崩溃),slave 被提升为 master。据我从节点上的 RabbitMQ 日志中可以看出,一切都按计划进行。RabbitMQ 日志中没有其他错误。
发生这种情况时,Rebus 被配置为仅连接到从属节点(然后提升为主节点),因此 Rebus 没有遇到 rabbitmq 故障,因此没有 Rebus 连接错误。但是,似乎 Rebus 在发生故障时停止了处理消息。
实际上,我们似乎在几个队列上遇到了这种情况,其中一些,但似乎并非所有队列都最终处于非同步状态。
更新 2 我能够很容易地重现该问题,因此它可能是我们设置中的配置问题。但这就是我们复制它的方法
- 启动集群中的两个节点,例如。rabbit1(主)和rabbit2(从)
- Rebus 连接到从机 rabbit2
- 关闭rabbit1,主人。rabbit2晋升为 master
队列被镜像
我们有两个小型测试应用程序来重现这一点,一个每秒发送一条消息的“发送者”和一个处理消息的“消费者”。
当rabbit1关闭时,“消费者”停止处理消息,但“发送者”继续发送消息,队列不断增长。
- 再次启动rabbit1,它作为slave加入
这没有任何效果,“消费者”仍然不处理消息。
- 重启“消费者”应用
当“消费者”重新启动时,它会检索所有消息并处理它们。
我想我已经正确地遵循了设置指南,但这可能是我们的配置问题。我似乎找不到任何可以表明我们做错了什么的东西。
Rebus 仍然连接到 RabbitMQ,我们看到在管理站点的连接选项卡中,当它停止处理消息时,“消费者”发送/接收 B/s 下降到大约 2 B/s
更新 3 好的,所以我下载了 Rebus 源并附加到我们的进程中,这样我就可以看到“RabbitMqMessageQueue”类停止时会发生什么。当“rabbit1*”关闭时,“BasicDeliverEventArgs”为空,这是代码
见:https ://github.com/rebus-org/Rebus/blob/master/src/Rebus.RabbitMQ/RabbitMqMessageQueue.cs#L178
我喜欢“wtf ??” 评论 :)
esb - 使用asp.net rebus 的最佳实践?
我有以下问题
[1]。有一个管理系统需要最频繁的 CRUD 操作。例如 int GetUserLimit(), List GetUserList(), int AddNewUser(User user), bool DeleteUser(), IsAuthenticated(string username, string passwrd)
对于上面列出的函数,Web 应用程序可能需要等待一些返回。
在这种情况下,是直接为 Web 应用程序提供 Web 服务更好,还是我们不公开这些 Web 服务,而是 Web 应用程序通过请求/回复模式与 EBS 通信?
解决方案1:
http://i.stack.imgur.com/cIRUR.png
解决方案2:
如果 Web 应用程序向一个组件 A“发送”命令,则组件 A 将消息回复到名为“webmsgqueue”的特定队列或将消息推送到 nosql 服务器。Web应用程序使用ajax轮询方法来检查“webmsgqueue”或nosql服务器中的mssage。
http://i.stack.imgur.com/F7qTs.png
[2] 如果我们要查询或上传的数据很大,选择Web服务是否更好?
serialization - 使用 Rebus 的序列化问题
我正在尝试在已经使用 MSMQ 传递消息的现有系统环境中插入#Rebus。
当然,目的是让 Rebus 接管一切;-),但目前我无法更改任何已经使用 MSMQ 传输的现有代码。
所以,我想我可以在系统的新部分中使用 Rebus 并将消息发送到现有的应用程序队列,但出现了问题。
我像这样配置我的 Rebus:
它按计划发送消息,但是当我现有的应用程序尝试从队列中读取时,会引发异常:
“无法反序列化作为参数传递的消息。无法识别序列化格式。”
有问题的方法调用是这样的:
通过代码挖掘我可以看到 Rebus 的 DefaultFilter 或多或少像我们的
我们的 MessagePropertyFilter 配置如下:
这种微妙的变化真的是异常的原因吗?我们还使用 BinaryFormatter 来序列化消息。
任何帮助将不胜感激 :-)
msmq - Rebus 的 MSMQ 要求
我开始将 Rebus 与 MSMQ 一起使用,但我似乎找不到 MSMQ 的要求。
那么在(角色|程序和功能)中,我需要设置哪些选项以及对 Rebus 的影响是什么?
我很确定我需要Message Queuing Server
;-) 但是其他人呢:
- 目录服务集成
- HTTP 支持
- 消息队列触发器
- 组播支持
- 路由服务
我认为这些都不是必需的,Rebus 也不支持任何额外的功能。
messaging - 我应该如何为一个生产者和多个消费者设置 rebus
我正在浏览示例并阅读文档,但我仍然不确定如何为我的场景配置 rebus(或者使用总线很合适)。
我有一个任务生产者要做,比如说 ImportOrder 和 CalculateOrderPrice
我想转储来自生产者的消息并将大量这些消息排队。我想要两个监听 ImportOrder 的客户端和 10 个监听 CalculatePriceOfOrder 的客户端。我不希望同一订单同时到达多个端点,我试图分散工作量。
到目前为止的生产者配置:
到目前为止的消费者配置:
我似乎无法配置此设置,我使用 msmq 还是 sqlserver 并不重要。
- rebus(或任何服务总线类型的解决方案)听起来很适合这里吗?
- 我应该使用 pub/sub 还是普通的发送模式?如果消息一次仅由一个或多个端点处理,该选择会影响吗?
- 谁能指出我一个很好的例子或解释如何设置这个场景?
nservicebus - Rebus 和 NServiceBus 应用程序之间的桥梁
在 Rebus 和 NServiceBus 应用程序之间提供桥梁的最佳方式是什么?对于我的应用程序,需要向我的旧 NServiceBus 2.0 主机发送/接收消息。
通过深入研究,我觉得 Rebus 中需要 NServiceBusMessageFormatter。我不确定我要去的方向。