当前位置: 首页 > 知识库问答 >
问题:

在MassTransit中发布来自saga的消息时,无法找到消息实体引发异常

史劲
2023-03-14

当在将MassTransit传输设置为Azure服务总线的saga中引发消息时,将引发以下异常,并在错误队列中放置错误:

Put令牌失败。状态-代码:404,状态-描述:
找不到消息实体'sb://xxxx-prod-bus.servicebus.windows.net/api/stateMachine-MessageEvent'。

但是,如果saga再次运行,消息将成功发布。在查看消息试图发布到的主题后,第一次该主题不存在,但似乎是在之后创建的,但是,该主题的Auto Delete On Idle属性被设置为5分钟,因此在一段时间不活动后,该主题消失,错误再次出现。

public interface ExampleMessage
{
    Guid OrderId { get; }    
}

private class ExampleMessageEvent :
    ExampleMessage
{
    public ExampleMessageEvent(Instance instance)
    {
        SomeProp = instance.SomeProp;
    }

    public string SomeProp { get; }    
}

其他处理程序只订阅exampleMessage接口,所以我希望即使没有人监听具体类型主题,发布也会继续?

避免这些问题的最佳方法是什么?我尝试使用重试来查看它是否重新创建交换,但是重试时没有创建任何内容。

似乎临时主题的默认时间是从这里开始的5分钟。然而,我希望如果在发布消息时主题不存在,那么它只会再次被创建?

Microsoft.Azure.ServiceBus.MessagingEntityNotFoundException:

共有1个答案

呼延宪
2023-03-14

因为使用的是实现已发布接口的类,所以需要作为实际的消息接口发布。我猜上面的示例遗漏了一件事,ExampleMessageEvent类实际上是私有的(或内部的)。

在saga中发布时,将类强制转换为接口类型,这样它就不会为类创建临时主题。

.Publish(context => (ExampleMessage)new ExampleMessageEvent(...));
 类似资料:
  • 物联网有很多设备,通过这条指令可以向某个特定的物联网设备发送特定的消息内容。 请求方式: "|4|1|3|topic|message|" 参数: topic 设置订阅的topic,获取设备topic可参考教程 message 发布消息的内容 返回值: "|4|1|3|1|\r" 消息发送成功 "|4|1|3|2|\r" 消息发送失败 Arduino样例: softSerial.print("|4|

  • 问题内容: 我们已经编写了一个Java客户端,用于将消息发布到kafka。代码如下所示 当我们执行此代码时,我们得到以下消息和异常 这发生在无限循环中,并且应用程序挂起…当我们检查kafka代理时,发现该主题已创建…但是我们没有收到消息…我们已经坚持了一段时间。 .. 请帮忙 问题答案: 我们终于解决了这个问题…我们在混合环境中运行kafka,如下文所述- https://medium.com/@

  • 我在discord.py做了一个机器人,希望我的机器人在网络钩子在特定频道发送消息时定位一个角色。有办法这么做吗?现在所有我有的是通道ID和我很确定这是一个客户端事件

  • 我试图使用他们文档中提到的masstransit配置将SNS主题订阅到SQS队列。消息已发布,但不会出现在SQS队列中。SQS队列名称:“测试”,SNS主题名称:“kbbico手动替换”。

  • 我的机器人不能发送嵌入或常规文本信息,代码执行,但没有什么是发送在不和谐的通道。我遵循了JDA维基的设置,我不知道我做错了什么。 机器人登录码

  • 我正在将SpringWebSocket 4.2.4与sockjs和stomp一起使用,并试图在异步任务中从服务器向所有订阅者发送消息,但运气不佳 我的班级是: 但是订阅者没有得到消息 有什么帮助吗?我做错了什么:( *编辑* 我的消息代理: 当我订阅时: 谢谢 **编辑2:** 谢谢你帮我解决这个问题:)