【问题标题】:How do I send a javax.jms.TextMessage over Azure Servicebus from .NET如何从 .NET 通过 Azure Servicebus 发送 javax.jms.TextMessage
【发布时间】:2013-09-04 08:39:49
【问题描述】:

我正在尝试使用 amqp 通过 azure 服务总线将简单的字符串消息从 .NET 发送到 Java 客户端。根据documentation,我应该能够发送这样的代理消息:

message = new BrokeredMessage("this is a text string");

并让它在 Java 客户端中显示为 TextMessage (javax.jms.TextMessage)。但是,当我尝试将 Java 中的消息转换为 TextMessage 时,我收到一个异常,说它无法将 jms.impl.BytesMessageImpl 转换为 TextMessage。任何人都知道为什么消息看起来像 BytesMessage 而不是 TextMessage?

根据docs 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

[更新2] 我找出了问题的根本原因。在我的设置中,我有一个将消息转发到队列的订阅者。看来这是消息变得混乱的地方。如果我将 AMQP 消息直接发送到队列,它将作为 TextMessage 到达我的 Java 应用程序。如果我通过 AMQP 将消息发送到我的主题,然后它会通过订阅者(带有过滤器)转发到我的队列,它会被分解为 BytesMessage。

那么我怎样才能让它正常工作呢?有没有办法设置我的订阅者转发到队列所以这有效?

【问题讨论】:

    标签: java azure amqp servicebus


    【解决方案1】:

    您编写的代码看起来是正确的。我唯一能想到的是你有一个旧版本的 .NET SDK,它是在添加 AMQP 支持之前发布的。您能否使用来自http://www.nuget.org/packages/WindowsAzure.ServiceBus/ 的最新服务总线 SDK 尝试您的代码。

    问候,
    戴夫。
    (服务总线团队。)

    【讨论】:

    • 嗨,戴夫,感谢您的意见。我使用的是最新版本的 ServiceBus SDK,所以这不是问题。我在最初的问题中添加了一些附加信息,说明为什么会发生这种情况。
    • 这听起来像一个错误。让我检查一下,然后回复你。
    • 我非常感谢 David,能够为我们的客户将消息复制到私有队列对我们来说意义重大。 - 谢谢
    【解决方案2】:

    目前在使用转发规则时,服务总线 AMQP 互操作性故事存在限制。在转发期间,使用数据合同序列化程序错误地重新序列化消息。我们会解决这个问题,完成后我会在这里报告。同时,一种可能的解决方法是使用消息属性来存储应用程序数据而不是正文。也就是说,在消息上使用字符串属性来存储显着信息,而不是使用正文。


    最好的问候,
    戴夫。
    服务总线团队

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-08
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 2019-09-03
      相关资源
      最近更新 更多