使用第一级和第二级重试与 Rebus 测试 Handle 和 Handle<IFailed> 方法

乒乓

如何调试Handle以下两种方法?

Handle在 Visual Studio 中的这两种方法上都设置了断点,并将消息发送到Subscriber1队列,但这两种方法都不会在 VS 下调用。

public class SomeHandler : IHandleMessages<string>, IHandleMessages<IFailed<string>>
{
    readonly IBus _bus;

    public SomeHandle(IBus bus)
    {
        _bus = bus;
    }

    public async Task Handle(string message)
    {
        // do stuff that can fail here...
    }

    public async Task Handle(IFailed<string> failedMessage)
    {
        await _bus.Advanced.TransportMessage.Defer(TimeSpan.FromSeconds(30));
    }
}

下面是发送给 的消息Subscriber1

我尝试发送不包括rbs2-msg-idor的消息rbs2-msg-type,它们都不会触发上述Handle方法。

{
  "body": "Test",
   //other fields
  "properties": {
    "rbs2-intent": "pub",
    "rbs2-msg-id": "cd57d735-3989-45b5-8a3c-e457fa61dc94",
    "rbs2-return-address": "publisher",
    "rbs2-senttime": "2019-05-27T15:07:25.1770000+01:00",
    "rbs2-sender-address": "publisher",
    "rbs2-msg-type": "System.String, mscorlib",
    "rbs2-corr-id": "cd57d735-3989-45b5-8a3c-e457fa61dc94",
    "rbs2-corr-seq": "0",
    "rbs2-content-type": "application/json;charset=utf-8"
  },
  //other fields
}

更新 1

如果在 中引发异常Handle(string message),则将根据第一级尝试计数重试该方法。这就是我们所需要的。

但是,Handle(IFailed<string> failedMessage)不调用,如何Handle(IFailed<string> failedMessage)像abvoe一样调试

一个注意事项:当在 中抛出异常时Handle(string message),不会调用 IErrorHandler,也不会调用 AddTransportMessageForwarder,这些是否正确?

mookid8000

你能试着检查一下你的日志吗?

当您删除rbs2-msg-id标头时,Rebus 会立即将消息移动到死信队列,只是拒绝处理它。这是因为 Rebus 的错误跟踪器无法跟踪没有消息 ID 的消息。

如果删除rms2-msg-type标头,序列化程序很可能会抛出错误并且不会反序列化传入的消息。

在这两种情况下,错误都会输出到记录器。

在这两种情况下,消息正文(string在这种情况下,但它可以是任何消息类型) cannot be constructed from the incomingbyte[] , so Rebus cannot dispatch the message as eitherstring notIFailed`。

更新 1后编辑

如果您的第二级重试没有启动,很可能是因为您尚未启用它们:

Configure.With(...)
    .(...)
    .Options(o => o.SimpleRetryStrategy(secondLevelRetriesEnabled: true))
    .Start();

IErrorHandler当需要将消息移动到死信队列时调用。当所有传递尝试都失败时(5 次正常传递尝试 + 5 次二级传递尝试),您应该会看到它被调用。

如果您按照我建议的方式进行了配置,AddTransportMessageForwarder则会在另一个总线实例中使用,该实例从error队列接收消息IErrorHandler已被调用,并且失败的error消息已转发到队列时,则应调用您的传输消息转发器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Autofac配置了Rebus的Handle TimeoutReply消息

来自分类Dev

如何从第一级和第二级数组获取IDS列表-Javascript

来自分类Dev

HANDLE和DCB的Linux实现

来自分类Dev

何时使用handle_info和handle_cast

来自分类Dev

Rebus和RavenDB

来自分类Dev

使用Facebook查找第二级和第三级连接

来自分类Dev

HTML和CSS第二级下拉

来自分类Dev

新的Rebus和插件中没有方法

来自分类Dev

handle_cast,多个内核和队列

来自分类Dev

int *和HANDLE *等价于C#

来自分类Dev

python中的asyncore.dispatcher:何时执行handle_closed和handle_read?

来自分类Dev

MySql PDO和第二级内部过程调用中引发的异常

来自分类Dev

在Rebus中测试Sagas

来自分类Dev

Rebus-审核队列和到期

来自分类Dev

Rebus RabbitMq 无法订阅和检索项目

来自分类Dev

matlab函数'handle'和python函数'object'之间的区别

来自分类Dev

C#编组处理HANDLE和CRITICAL_SECTION

来自分类Dev

PHPUnit和测试CRUD方法

来自分类Dev

测试Django和模型方法

来自分类Dev

一级 SVC 和二级 SVC 中提到的“100 个特征”是什么?

来自分类Dev

在测试方法和测试方法中使用相同的代码

来自分类Dev

ReactJS-向一级子级和嵌套子级继承道具的正确方法

来自分类Dev

<HANDLE>构造的值可以为“ 0”;在perltestscript.pl第16行使用defined()测试

来自分类Dev

在使用数据库查询测试handle_cast期间如何避免竞争状况?

来自分类Dev

在测试和要测试的方法中使用相同的值

来自分类Dev

结合使用Autofac和Rebus时没有可用的MessageContext

来自分类Dev

结合使用Autofac和Rebus时没有可用的MessageContext

来自分类Dev

wp_handle_upload问题指定的文件上传测试失败

来自分类Dev

wp_handle_upload问题指定的文件上传测试失败

Related 相关文章

热门标签

归档