2017-09-25 131 views
0

我試圖發送使用AMQP QPID Java庫Azure的服務總線AMQP - 如何指定

我收到此錯誤信息服務總線的會話ID:

"SessionId needs to be set for all brokered messages to a Partitioned Topic that supports Ordering"

我演講的題目有「強制消息排序」開啓(這是後我得到這個錯誤我猜)

在使用Azure的服務總線的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) { 
    } 

回答

1

SessionID屬性映射到AMQP的消息properties.group-ID。該Qpid JMS客戶端應該將其映射到的JMSXGroupID屬性,所以嘗試以下方法, createBytesMessage.setStringProperty("JMSXGroupID", "session-1");

+0

謝謝,爲我工作 –

0

正如你猜到了,還有一個相似的,所以線程Azure Service Bus topics partitioning證實與false通過一套SupportOrdering禁用該功能Enforce Message Ordering可以解決這個問題,但不能通過Azure服務總線Java庫完成,因爲現在屬性supportsOrdering已被隱藏。

你可以嘗試設置屬性Group作爲@ XinChen所說的使用AMQP,作爲從here下面的內容。

Service Bus Sessions, also called 'Groups' in the AMQP 1.0 protocol, are unbounded sequences of related messages. ServiceBus guarantees ordering of messages in a session.

希望它有幫助。