我是新的RabbitMQ,我有点迷失在留档。
目前,例如,我正在尝试构建一个侦听队列的小型邮件服务,但我有点卡在我应该在哪里放置我的服务具有的参数(目的地、主题......
我应该将它们放在某种编码格式(json)中,放在我的消息中,还是应该使用头结构,如下例所示:
string message = "Hello World!";
var body = Encoding.UTF8.GetBytes(message);
var properties = new BasicProperties();
properties.Headers = new Dictionary<string, object>();
properties.Headers.Add("destination", "matthias123@localhost");
channel.BasicPublish(exchange: "", routingKey: "sendmail", basicProperties: properties,body: body);
使用标头是否提供额外的好处?例如,是否可以过滤发送到特定目的地的消息?
我不会将标题用于您要做的事情。在我看来,这些信息属于消息的正文。
这么看吧:
邮件正文应包含完成请求的工作所需的一切。在这种情况下,它将是发件人、主题、电子邮件内容等。
另一方面,标头是有关AMQP消息的数据位,而不是消息内容。
这里有很多潜在的混淆,你的工作是“电子邮件”。AMQP 邮件和电子邮件之间的术语重叠太多。
话虽如此,我将选择一个不同的工作示例来做:计算斐波纳契序列。
在这种情况下,您通过Rabbitmq发送的消息将包含一些内容,例如要预先计算多少斐波纳契位置,然后再发送多少斐波纳契位置。
例如,您可能会发送这样的消息(在这种情况下为json):
{
start: 1,
take: 3
}
这应该会产生1,1,2
的结果,因为它从第一个位置开始并从序列中返回3个项目。
使用您的特定问题和逻辑:我应该将开始
和采取
属性放入消息的标头中吗?
不。
如果我这样做了,那就意味着我的消息是空的,因为所有关于要做的工作的信息都包含在标题中。
当我这样看的时候,这没有意义,因为现在没有消息要发送……只有标头。
另一方面,如果我将这两点数据保存在消息正文中,那么作为发送关于AMQP消息本身的元数据的一种方式,头将变得更加有用……不是关于消息内容的信息,而是关于消息想法的信息。
在这种情况下,我是说我想从斐波纳契序列中返回项目。换句话说,我正在进行RPC(远程过程调用)并期望返回值。
AMQP 不支持直接返回值。但是,我能做的是将队列名称填充到标头中,并将结果发送到该队列。然后,请求斐波那契数的代码可以侦听该队列并获得结果。
所以在发送消息时,我可能会这样做:
var properties = new BasicProperties();
properties.Headers = new Dictionary();
properties.Headers.Add("return-queue", "fibreturn");
在这里,我在标头内部设置了一个“返回队列”标头——关于消息的信息,或者在这种情况下请求信息。处理斐波纳契序列的代码将读取这个标头并将响应发送回这个队列。
这是更好地使用标头,因为它使标头存储关于消息的信息…在这种情况下,响应应该发送到哪里。但是,标题不包含要完成的实际工作的信息。这些都直接存储在消息正文中。
另外,我故意不使用“回复”属性,就像您通常应该使用的那样,来执行RCP。我用这个例子来说明为什么你不应该把你的“目的地”放在标题中。为了更好地实现fibonacci序列思想,请参阅RMQ文档以及它如何正确使用“回复”https://www.rabbitmq.com/tutorials/tutorial-six-dotnet.html
我试图在我的邮件中添加自定义标题,所以每当异常发生并最终出现在死信队列中时,我都可以看到异常是什么。然而,我所有的尝试都失败了。 使用。setHeader() 在outMessage上设置标题 正在设置exchange的属性 不允许将异常设置为有效负载中的属性。 RABBITMQ字符串:
我试图用Spring Cloud Stream创建一个kafka使用者,以便监听在任何Spring上下文之外构建的kafka消息,并使用自定义头(operationType)。 我使用的是Spring Boot 1.5.x/Spring Cloud egdware.sr5和1.1.1版本的kafka-client和Kafka2.11。 我的侦听器类包含此方法 而operationType标头是存在
这样的消息在开发环境中很好,但是在生产环境中,我们不能在浏览器中向用户显示这一点。所以我想知道谷歌云存储中是否有定制这些消息和页面的规定。 提前感谢, 约杰什
null null 示例GET请求 我可以从以下示例URL获取位置列表: 请求标头 null null
简介 此消息 用来接收 用户自定义TOPIC消息 发送过来的事件。 消息体 ChannelMessageBean 例子 Kotlin @Subscribe(threadMode = ThreadMode.MAIN) fun onReceiveCustomMessage(customEvent: ChannelMessageBean) { // TODO } ChannelMessageB
有没有办法配置默认消息 或 在上面的示例中,