我正在尝试使用 amqp 通过 azure 服务总线将简单的字符串消息从 .NET 发送到 Java 客户端。根据文档,我应该能够发送这样的代理消息:
message = new BrokeredMessage("this is a text string");
并将其作为 TextMessage (javax.jms.TextMessage) 显示在 Java 客户端中。但是,当我尝试将 Java 中的消息转换为 TextMessage 时,我收到一个异常,说它无法将 jms.impl.BytesMessageImpl 转换为 TextMessage。任何人都知道为什么消息看起来像 BytesMessage 而不是 TextMessage?
根据文档,BytesMessage 将像这样构建:
byte[] bytes = { 33, 12, 45, 33, 12, 45, 33, 12, 45, 33, 12, 45 };
message = new BrokeredMessage(bytes);
我没有这样做....
任何人都知道如何做这样的事情?
[更新] 有趣的是,我测试了在我的连接字符串中使用和不使用 TransportType=Amqp 指定的发送代码。我还在代码运行时验证了 MessagingFactory 设置每次也设置为正确的传输类型。无论我使用哪种传输类型,消息都会作为 BytesMessage 到达我的 Java 应用程序。无论消息如何发送,查看消息中的字节都会显示相同的结果:
@ string 3http://schemas.microsoft.com/2003/10/Serialization/�&BLABLA this is a message
[UPDATE2] 我找到了问题的根本原因。在我的设置中,我有一个将消息转发到队列的订阅者。看来这就是消息变得混乱的地方。如果我将 AMQP 消息直接发送到队列,它将作为 TextMessage 到达我的 Java 应用程序。如果我通过 AMQP 将消息发送到我的主题,然后它会通过订阅者(带有过滤器)转发到我的队列,它会被分解为 BytesMessage。
那么我怎样才能让它正常工作呢?有没有办法设置我的订阅者转发到队列所以这有效?