带有AMQP的Azure Service总线 - 如何指定会话ID

时间:2017-09-25 10:18:26

标签: java azure session amqp azureservicebus

我正在尝试使用AMQP QPID java库向服务总线发送消息

我收到此错误:

  

“需要为分区的所有代理消息设置SessionId   支持订购的主题“

我的主题已启用“强制消息排序”(这是我猜这个错误的方式)

使用Azure Service总线java库(而不是AMQP)时,我有这个功能:

  

this.entity.setSessionId(...);

使用AMQP库时,我没有看到在我要发送的邮件上设置会话ID的选项

请注意,如果我取消选中“强制邮件订购”选项,邮件将成功发送

这是我的代码

private boolean sendServiceBusMsg(MessageProducer sender,Session sendSession) {

        try {
            // generate message

            BytesMessage createBytesMessage = (BytesMessage)sendSession.createBytesMessage();

            createBytesMessage.setStringProperty(CAMPAIGN_ID, campaignKey);             
            createBytesMessage.setJMSMessageID("ID:" + bm.getMessageId());                                                    
      createBytesMessage.setContentType(Symbol.getSymbol("application/octet-stream"));

            /*message is the actual data i send / not seen here*/
            createBytesMessage.writeBytes(message.toByteArray());

            sender.send(createBytesMessage);

        } catch (JMSException e) {
    }

2 个答案:

答案 0 :(得分:3)

SessionId属性映射到AMQP消息properties.group-id。 Qpid JMS客户端应将其映射到JMSXGroupID属性,因此请尝试以下操作, createBytesMessage.setStringProperty("JMSXGroupID", "session-1");

答案 1 :(得分:1)

正如您所猜测的那样,有一个类似的SO帖子Azure Service Bus topics partitioning已经过验证,通过Enforce Message Ordering设置SupportOrdering来禁用功能false可以解决问题,但它可以& #39;是通过Azure Service Bus Java库完成的,因为属性supportsOrdering现在是私有的。

您可以尝试将属性Group设置为@XinChen使用AMQP,作为here下面的内容。

  

服务总线会话,也称为' 群组'在AMQP 1.0协议中,是相关消息的无界序列。 ServiceBus保证会话中的消息排序。

希望它有所帮助。