问题标签 [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.

0 投票
0 回答
619 浏览

asp.net-web-api - 如何正确设置 WebApi、EasyNetQ 和 Ninject?

这就是我迄今为止所拥有的。我被困在概念/在哪里实施 IBus 注入/创建点(发布者)。我试图将发布者功能全部保留在项目中,而不是为其创建单独的服务。

这是我的第一次通过,所以我愿意接受建议和最佳实践建议:-)

剩下要做的事情:

  • 创建一个具有适当设置的rabbitmq配置文件,定义队列名称和?
  • 创建一个负责连接管理的消息处理程序是什么?
  • 在应用程序启动时创建发布者,何时正确处理?

EasyNetQ Wrapper 替换 EasyNetQ 内部 IoC,Ninject 替换:

NinjectWebCommon.cs

发布者类:

0 投票
1 回答
3829 浏览

c# - EasyNetQ - 从现有队列接收

我正在考虑使用 EasyNetQ 与 RabbitMQ 进行交互,并想知道它是否可以支持以下情况:

  1. 使用一些任意参数在外部声明队列(例如 x-message-ttl)
  2. 使用 EasyNetQ 的客户端代码从该队列发送和接收消息。

我发现的可能性是:

  • 简单的 IBus API 要求队列具有默认参数
  • 高级 IAdvancedBus API 允许指定声明队列的参数,但不是全部(例如不能设置 x-max-length)

问题是我可以使用现有队列和自定义参数而不需要指定它们吗?

0 投票
1 回答
859 浏览

c# - 如何在 EasyNetQ 中为每个消费者声明自定义错误交换?

当发生错误时,我有四个消费者将消息发布到默认 EasyNetQ_Default_Error_Queue 是否可以让每个队列消费者编写自己的错误交换

例如;


0 投票
3 回答
11834 浏览

c# - 如何使用 EasyNetQ / RabbitMQ 进行错误处理

我在带有 EasyNetQ 库的 C# 中使用 RabbitMQ。我在这里使用 pub/sub 模式。我仍然有一些问题希望有人能帮助我解决:

  1. 当使用消息时出现错误时,它会自动移动到错误队列中。如何实现重试(以便将其放回原始队列,并且当它无法处理 X 次时,它会移至死信队列)?
  2. 据我所见,总是有 1 个错误队列用于转储来自所有其他队列的消息。如何每种类型有 1 个错误队列,以便每个队列都有自己关联的错误队列?
  3. 如何轻松重试错误队列中的消息?我尝试了软管,但它只是将消息重新发布到错误队列而不是原始队列。我也不太喜欢这个选项,因为我不想在控制台中摆弄。最好我只是针对错误队列进行编程。

任何人?

0 投票
1 回答
596 浏览

c# - EasyNetQ/RabbitMQ - 基于主题发布消息

我在 EasyNetQ/RabbitMQ 中创建了一个带有主题的订阅者。我想我至少有,因为我可以看到队列名称下有一个绑定。它如下所示:

在此处输入图像描述

队列名称本身是一个随机 GUID。但我不认为这很重要。

但是,当我尝试通过 EasyNetQ 发布消息时:

消息永远不会发布到上述队列中。

0 投票
1 回答
587 浏览

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”类型的参数。

0 投票
1 回答
436 浏览

.net - 无法使用 EasynetQ Client for .Net 在 RabbitMQ 中为消费者实现多个处理程序

我正在使用 Rabbitmq 队列解决方案,我有 4 个队列和一个消费者。我希望我的消费者使用所有这些队列并为每个队列提供单独的处理程序。

我用谷歌搜索了这个,发现 Rabbitmq 和 EasyNetQ(RabbitMQ 的 .Net 客户端)通过高级 API 提供了这个功能(这个链接这个链接

本文提供的示例代码为消费者定义多个处理程序:

我的问题:所以当我尝试使用这个例子时, Add<> 方法是未知的。问题是什么?我应该怎么做才能使这种方法可用?

我的代码使用部分:

我的代码:

我认为我应该使用命名空间或类来使用 Add<> 方法。可能这是我应该从库中找到并添加相关类的扩展方法。

0 投票
1 回答
3400 浏览

c# - 对一个消费者使用 EasyNetQ 多个处理程序不起作用

我们正在使用 RabbitMQ 在 C# .Net(EasyNetQ 客户端)中对消息进行排队。

我想要一个消费者应用程序(C# 控制台应用程序)监听一个队列并为每种消息类型提供多个处理程序。

我实现了这个场景,我的代码在这里:

我的问题:但是当我执行这个消费者时,它什么也不做。不要发生任何事情。

我像这样将消息发布到该队列:

问题是什么。

0 投票
1 回答
1095 浏览

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 是否有等效的依赖解析器?有更好的模式吗?我会做一些事情来保持松散耦合,所以我想避免静态类、单例或其他任何迫使我进入难以测试的具体依赖关系的东西。

有任何想法吗?

0 投票
1 回答
148 浏览

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 如何导致它静默失败而实际上没有抛出任何错误或任何东西。