问题标签 [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.
c# - 使用 Unity 作为 IoC 的 Rebus Servicebus
我对 Rebus 有几个新手入门问题。Rebus 自述文件中的所有精彩示例都使用温莎城堡,但我没有那个选项;相反,我必须使用 Unity。
我的第一个挑战是为 Unity IoC 容器找到合适的适配器,如示例所述:
我终于在这里找到了一些似乎可以完成这项工作的代码,但也许存在更好的容器,因为我必须自己实现IContainerAdapter接口(我想知道是否需要......)。
但我可以忍受那个...
我的下一个问题更糟,我还没有发现。在 Rebus Getting started-example 中,以下内容用于向 IoC 容器添加处理程序:
以上是 Windsor Castle 语法,我不知道 Unity 语法应该如何用于相同的操作。所以我在这里需要一些帮助。一个建议是,如果我可以参考一个适用于 Unity 的小型解决方案。
servicebus - 拓扑说明
我知道 Rebus 完全有能力将消息从 A 点传输到 B 点(使用 MSMQ 作为传输层)。为了让事情变得非常清楚,Rebus 是否也能够进行一对多的消息传递,即从 A 点发送的消息应该在 B 点和 C 点都结束?
如果有可能,它是如何做到的?我看不到任何集中的分发站点(邮局),所以我假设通信将包括从每个端点到每个其他端点的通道(因此在一个进程必须与其他 5 个端点通信的网络中,有将有 5 个通道辐射出此过程)。你能证实这个假设吗?
rabbitmq - 如何通过 RabbitMQ 中的自定义主题交换让 Rebus 玩得更好?
Rebus 具有灵活的系统,允许我为不同的消息类型指定不同的端点,无论是在web.config
自定义的IDetermineMessageOwnership
.
据我所知,消息所有权仅由字符串表示。使用 MSMQ 传输,此字符串指向消息传递到的队列。在 RabbitMQ 中,字符串用作消息的主题,然后将其传递到名为“Rebus”的通用交换器。Rebus 是个好人,所以他还在RabbitMQ 服务器中建立了一个队列,使用相同的名称,并在 Rebus 交换中从主题到队列进行绑定。
我的问题是:是否可以让 Rebus不创建队列和绑定,但仍将消息传递到为每条消息设置相关主题的交换器?
手动声明队列和绑定将允许我设置一个很棒的主题交换,使用带有通配符的绑定等等。这是一个带有时髦绑定的主题交换的很好的插图,只是为了让我的问题看起来更时尚和性感:
nservicebus - Rebus 和分布式工人
我们目前正在评估 Rebus 和 NServiceBus。Rebus 有什么类似于 NServiceBus 的分布式工作负载的东西吗?从文档中很难辨别:)。
亲切的问候克里斯蒂安
servicebus - 使用 Rebus 发布/订阅持久消息
我需要一种向未知数量的订阅者发布消息的方法。消息应该是持久的/持久的,并分为三个优先级(高、中和低)。其中一个订阅者只能处理有限的负载,并且一些消息更重要。首先处理高优先级的消息等。
我如何使用 Rebus 做到这一点?我想我需要每个订阅者三个队列?
在哪里可以找到具有持久队列和 MSMQ 的发布/订阅示例?
servicebus - 在 Rebus 中是否不可能进行相同的流程订阅
我正在尝试将 Rebus 用作同一进程/AppDomain 中的内部总线。
我修改了Pub/Sub 示例并添加了 SameProcessHandler:
巴士启动后新增订阅:
最后添加了目标队列(不确定是否需要):
但是我收到错误“Rebus 当前未配置端点映射机制”,我应该在订阅时指定目的地或更改配置。我宁愿使用配置,但如何?
c# - 工作单元内多条消息的相同 Rebus 处理程序实例
我希望批量处理相关消息,例如使用 Rebus 服务总线在相同范围/事务中使用相同的处理程序(相同的实例)处理事件 CustomerCreated 和 PreferredCustomer。
同一个处理程序正在处理两个消息/事件:
发送消息时我使用批处理操作(在 NServiceBus 中传输消息)
为了控制处理程序的生命周期,我使用了Windsor Castle 的 Scoped 生活方式
以及实例化 ScopedUnitOfWork 的自定义 UnitOfWorkManager
最后将 Rebus 配置为使用 CustomUnitOfWorkManager
这是正确的方法吗?
我有限的测试表明这应该有效。我什至可以扩展它以包括针对 ScopedUnitOfWork 中的数据存储的事务管理。
rebus - 如何使用 Rebus 过滤消息?
处理程序接收到的每条消息都包含聚合根的整个状态。然后系统能够根据这些数据执行所需的操作。在我的场景中,根据消息中的数据授予访问权限,例如对房间 A 和 B 的访问权限。一条消息包含整组已授予的访问权限。这些消息可能会乱序到达,因为像 MSMQ 这样的消息传递系统不保证有序传递。
消息 #1 授予对房间 A 和 B 的访问权限,但消息 #2 仅授予对房间 A 的访问权限的场景。如果它们无序到达,则授予房间 A 的访问权限,然后再授予房间 A 的访问权限& B. 这不是预期的结果。只应允许进入房间 A。每条消息都包含一个时间戳,该时间戳在发布时设置。我想使用此时间戳来删除乱序到达的旧消息,例如,如果消息 #2 在消息 #1 之前到达,则应该丢弃消息 1#。
我可以在每个处理程序方法中实现这个过滤器,但这会很乏味,所以我希望 Rebus 有一些类似EAI 消息过滤器的东西?
我愿意接受其他选择/实施吗?
nlog - Nlog 的 Rebus 配置
我正在尝试将 NLog 与 Rebus 一起使用,但出现异常:无法访问类型的构造函数:Rebus.Configuration.RebusConfigurer
。是否授予了所需的权限?
有什么线索吗?
为了澄清,两个包都是 0.32.3,stacktrace 是:
c# - Rebus中某种消息类型的串行处理
我们有一个与第三方网络服务对话的 Rebus 消息处理程序。由于我们无法直接控制的原因,此 WCF 服务经常抛出异常,因为它在自己的数据库中遇到了数据库死锁。然后 Rebus 将尝试处理此消息五次,这在大多数情况下意味着这五次中的一次将是幸运的并且不会陷入僵局。但是经常发生消息在死锁之后确实会死锁并最终进入我们的错误队列。
除了解决死锁的根源(这将是一个长期目标)之外,我还可以想到两个选择:
继续尝试仅使用此特定消息类型,直到成功。最好我可以设置一个超时,所以“如果有五个死锁,然后在 5 分钟内再试一次”,而不是通过连续尝试进一步阻塞进程。我已经做了一个 Thread.Sleep(random) 来传播消息,但它仍然会在五次尝试后放弃。
将此特定消息类型发送到一个不同的队列,该队列只有一个处理消息的工作人员,因此这是串行发生的,而不是并行发生的。我们当前的配置使用 8 个工作线程,但这只会使死锁情况变得更糟,因为 Web 服务现在被并发调用并且消息相互干扰。
选项#2 有我的偏好,但我不确定这是否可行。我们在接收端的配置目前如下所示:
接收方的 .config :
从配置中我可以看出,只能将一个输入队列设置为“收听”。我也无法通过流畅的映射 API 找到一种方法。这似乎也只需要一个输入和错误队列:
基本上,我正在寻找的是类似的东西:
关于如何处理我的要求的任何提示?