【问题标题】:Message format in Message broker消息代理中的消息格式
【发布时间】:2020-03-02 05:33:58
【问题描述】:

我是消息代理的新手,我正在尝试运行一个向代理发送消息“Hello”的简单项目。消息代理是 ActiveMQ。

using System;
using Amqp;

namespace Sender
{
    class Program
    {
        static void Main(string[] args)
        {
            Address address = new Address("amqp://guest:guest@localhost:5672");
            Connection connection = new Connection(address);
            Session session = new Session(connection);

            Message message = new Message("Hello");
            SenderLink sender = new SenderLink(session, "sender-link","test");
            sender.Send(message);


            sender.Close();
            session.Close();
            connection.Close();
        }
    }
}

但是当我在 ActiveMQ 的 Web 控制台中看到该消息时,它会将消息详细信息显示为“Sw¡Hello”。我不明白为什么它会打印一些额外的字符。有人可以帮我解决这个问题吗?

【问题讨论】:

  • “代理控制台”具体是什么意思?
  • @JustinBertram 我指的是 ActiveMQ 的 Web 控制台。

标签: c# .net-core activemq


【解决方案1】:

AMQP 消息正文的 ActiveMQ 控制台中的布局可能与实际内容有所不同,因为消息被转换为代理自己的内部协议的中间形式,称为 Openwire。因此,您不应该指望在那里看到完美格式化的东西,因为代理可能会保留完全重建 AMQP 消息所需的额外数据,或者可能只是将其存储为原始字节消息,这意味着消息正文将具有 UTF8 大小编码保留在正文中的字节。

要检查的更重要的事情是,如果您使用 AMQP 客户端使用消息,您是否获得了您期望的有效负载。

消息从 AMQP 到 Openwire 的内部交叉编码由配置的 AMQP 转换器控制,请参阅文档here

【讨论】:

    【解决方案2】:

    就代理而言,任何消息的主体都只是一个字节数组。这些字节可以是二进制数据或文本数据。如果是文本,字符可以用 US-ASCII、UTF-8、UTF-16 等编码。经纪人不知道也不关心。

    Web 控制台会尽最大努力打印数据以用于管理目的,但它并不总是正确无误,这几乎肯定是您看到奇怪字符的原因。

    检查消息中数据的真正方法是实际使用它并以这种方式验证其内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-14
      • 2015-07-17
      • 2018-10-08
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多