问题标签 [easynetq]
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.
asp.net-web-api - 如何正确设置 WebApi、EasyNetQ 和 Ninject?
这就是我迄今为止所拥有的。我被困在概念/在哪里实施 IBus 注入/创建点(发布者)。我试图将发布者功能全部保留在项目中,而不是为其创建单独的服务。
这是我的第一次通过,所以我愿意接受建议和最佳实践建议:-)
剩下要做的事情:
- 创建一个具有适当设置的rabbitmq配置文件,定义队列名称和?
- 创建一个负责连接管理的消息处理程序是什么?
- 在应用程序启动时创建发布者,何时正确处理?
EasyNetQ Wrapper 替换 EasyNetQ 内部 IoC,Ninject 替换:
NinjectWebCommon.cs
发布者类:
c# - EasyNetQ - 从现有队列接收
我正在考虑使用 EasyNetQ 与 RabbitMQ 进行交互,并想知道它是否可以支持以下情况:
- 使用一些任意参数在外部声明队列(例如 x-message-ttl)
- 使用 EasyNetQ 的客户端代码从该队列发送和接收消息。
我发现的可能性是:
- 简单的 IBus API 要求队列具有默认参数
- 高级 IAdvancedBus API 允许指定声明队列的参数,但不是全部(例如不能设置 x-max-length)
问题是我可以使用现有队列和自定义参数而不需要指定它们吗?
c# - 如何在 EasyNetQ 中为每个消费者声明自定义错误交换?
当发生错误时,我有四个消费者将消息发布到默认 EasyNetQ_Default_Error_Queue 是否可以让每个队列消费者编写自己的错误交换
例如;
c# - 如何使用 EasyNetQ / RabbitMQ 进行错误处理
我在带有 EasyNetQ 库的 C# 中使用 RabbitMQ。我在这里使用 pub/sub 模式。我仍然有一些问题希望有人能帮助我解决:
- 当使用消息时出现错误时,它会自动移动到错误队列中。如何实现重试(以便将其放回原始队列,并且当它无法处理 X 次时,它会移至死信队列)?
- 据我所见,总是有 1 个错误队列用于转储来自所有其他队列的消息。如何每种类型有 1 个错误队列,以便每个队列都有自己关联的错误队列?
- 如何轻松重试错误队列中的消息?我尝试了软管,但它只是将消息重新发布到错误队列而不是原始队列。我也不太喜欢这个选项,因为我不想在控制台中摆弄。最好我只是针对错误队列进行编程。
任何人?
c# - EasyNetQ/RabbitMQ - 基于主题发布消息
我在 EasyNetQ/RabbitMQ 中创建了一个带有主题的订阅者。我想我至少有,因为我可以看到队列名称下有一个绑定。它如下所示:
队列名称本身是一个随机 GUID。但我不认为这很重要。
但是,当我尝试通过 EasyNetQ 发布消息时:
消息永远不会发布到上述队列中。
c# - 具有 EasynetQ 消息生命周期的简单注入器 Ioc DBContext
我对DBContext
使用 Simple Injector 的 EF 的生命周期有疑问,我有一个连续运行的工作服务,但我希望DBContext
在消息的生命周期内初始化它,而不是在工作服务应用程序的生命周期内初始化。
有一些关于如何使用 Autofac 执行此操作的示例,但我在使用 Simple Injector 时遇到了麻烦。以前有人这样做过吗?
见: http: //nblumhardt.com/2011/01/an-autofac-lifetime-primer/
我们注册的当前实现是:
在工作模块内部,我们有:
但是,我们不想为我们的 使用 Lifestyle Transient DBContext
,我们希望它在消息处理程序期间保持活动状态。
更新:
史蒂文,这听起来像是很好的解决方案,只是在注册IMessageHandler<T>
例如时遇到了一些问题
type 的构造函数包含未注册的名为“decorateeFactory”LifetimeScopeMessageHandlerDecorator
的类型参数。Func<NoticeMessageHandler>
我之前曾尝试过注册,并试图将其排除在外,还有很多变化,但没有运气。这是我注册装饰器的方式:
错误:
LifetimeScopeMessageHandlerDecorator 类型的构造函数包含
Func<NoticeMessageHandler>
未注册的名为“decorateeFactory”类型的参数。
c# - 对一个消费者使用 EasyNetQ 多个处理程序不起作用
我们正在使用 RabbitMQ 在 C# .Net(EasyNetQ 客户端)中对消息进行排队。
我想要一个消费者应用程序(C# 控制台应用程序)监听一个队列并为每种消息类型提供多个处理程序。
我实现了这个场景,我的代码在这里:
我的问题:但是当我执行这个消费者时,它什么也不做。不要发生任何事情。
我像这样将消息发布到该队列:
问题是什么。
dependency-injection - 使用 topshelf.ninject 在模块中获取 ninject 内核
我正在编写一项新服务,并且是第一次使用 Topshelf 和 EasyNetQ。我没有使用 MVC 或 WebAPI(大多数 ninject 教程/博客文章似乎都假设)。关键依赖项是 Topshelf、Ninject(mono 构建版本而不是 nugget 包)和 EasyNetQ。
我选择 ninject 是基于在 MVC 项目中使用过它,以及 Topshelf.ninject 库的可用性。
因此,在设置 topshelf 时,我调用 UseNinject 方法并传入一个 Ninject 模块:
模块如下所示:
和工厂:
我的问题是 ninject 模块中 IExchange 和 IQueue 的绑定。如您所见,工厂方法需要一个 IAdvancedBus 实例,但是 Kernel 在运行时为空。我试图通过方法 args 传递依赖项,因为它是一个静态类,我无法通过构造函数注入。
这样做的正确方法是什么?我似乎无法获得对 ninject 内核的引用,而且感觉不对。我觉得我正在尝试以错误的方式做这件事的兔子洞。此外,内核被标记为过时,我看不到另一种获取对象实例的方法。显然我也不能像在 MVC 中那样使用依赖解析器。
topshelf 是否有等效的依赖解析器?有更好的模式吗?我会做一些事情来保持松散耦合,所以我想避免静态类、单例或其他任何迫使我进入难以测试的具体依赖关系的东西。
有任何想法吗?
rabbitmq - 为什么 EasyNetQ 在被 ILMerged 后静默失败?
我正在为 Dynamics CRM 2015 构建一个插件组件。因为我们正在部署到 CRM Online,所以插件必须是一个签名的 DLL - 我们不能在它旁边部署其他 DLL,我们不能在 GAC 中放置任何东西,所以我使用ilmerge.exe将我的程序集合并并签名到一个 DLL 中。
问题是,据我所知,EasyNetQ/RabbitMQ 在合并时没有发送任何消息。我可以在本地重现它,所以这不是 CRM 环境问题。
我有三个 DLL
- 我的插件.dll
- EasyNetQ.dll
- RabbitMQ.Client.dll
如果我在我的测试代码中分别引用这些 DLL 并在我的插件代码上调用 .Execute() ,一切都会很好地工作
我有一个后期构建步骤:
$(SolutionDir)packages\ilmerge.2.14.1208\tools\ilmerge.exe /out:$(TargetDir)MyPlugin.Ilmerged.dll /keyfile:$(TargetDir)plugin_key.snk $(TargetDir)EasyNetQ.dll $(TargetDir)RabbitMQ.Client.dll $(TargetDir)MyPlugin.dll
这会输出一个签名的 DLL,MyPlug.Ilmerged.dll
它(理论上!)包含 EasyNetQ、RabbitMQ 和我的插件代码。一切都编译得很好。如果我从我的测试代码中删除单个 DLL 引用并添加对该 ILMerged 程序集的单个引用,它编译得很好,并且代码不会引发任何异常 - 我只是没有收到任何消息出现在队列中。
这可能与 EasyNetQ 用于解析 RabbitMQ 的程序集绑定重定向有关吗?或者其他的东西?我完全不知道 ILMerge 如何导致它静默失败而实际上没有抛出任何错误或任何东西。