我是消息代理的新手,我正在尝试运行一个简单的项目,该项目向代理发送消息“ 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”。我不明白为什么它要打印一些额外的字符。有人可以帮我吗?
答案 0 :(得分:1)
在ActiveMQ控制台中,AMQP消息正文的布局可能与实际内容略有不同,因为消息已转换为代理自己的内部协议的中间形式,称为 Openwire 。因此,您不应该指望那里的格式完全正确,因为代理可能正在保留完全重建AMQP消息所需的其他数据,或者可能只是将其存储为原始字节消息,这意味着消息正文将具有UTF8大小。编码保留在正文中的字节。
要检查的更重要的事情是,如果您使用AMQP客户端使用消息,则会获得预期的有效负载。
从AMQP到Openwire的消息的内部交叉编码由配置的AMQP转换器控制,请参见文档here。
答案 1 :(得分:0)
就代理而言,任何消息的主体都只是字节数组。这些字节可以是二进制数据或文本数据。如果是文本,则可以使用US-ASCII,UTF-8,UTF-16等对字符进行编码。代理不知道也不在乎。
Web控制台会尽最大努力打印数据以用于管理目的,但是它不能始终使所有内容正确,这几乎可以肯定是为什么您看到奇数字符的原因。
检查消息中数据的真正方法是实际使用它并以此方式验证其内容。