代码之家  ›  专栏  ›  技术社区  ›  Maayan Hope

Azure Service bus with AMQP-如何指定会话ID

  •  0
  • Maayan Hope  · 技术社区  · 7 年前

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

    “需要为分区的所有代理消息设置SessionId

    我的主题打开了“强制消息排序”(我想这就是我得到这个错误的方式)

    使用Azure Service bus java库(而不是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 回复  |  直到 7 年前
        1
  •  5
  •   Xin Chen    7 年前

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

        2
  •  1
  •   Peter Pan    7 年前

    正如你所猜测的,有一个类似的SO线程 Azure Service Bus topics partitioning 已验证要禁用该功能 Enforce Message Ordering via集合 SupportOrdering false 可以解决该问题,但无法通过Azure Service Bus Java library完成,因为该属性 supportsOrdering 现在处于贫困状态。

    你可以试着设置属性 Group 正如@XinChen所说的使用AMQP,如下内容来自 here .

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