Search code examples
javaazuresessionamqpazureservicebus

Azure Service bus with AMQP - how to specify the session ID


I am trying to send messages to Service bus using AMQP QPID java library

I am getting this error:

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

My topic has "Enforce Message ordering" turned on (this is way i get this error i guess)

When using the Azure Service bus java library (and not AMQP) i have this function :

this.entity.setSessionId(...);

When using the AMQP library i do not see an option to set the session ID on the message i want to send

Note that if i un-check the option "Enforce Message ordering" the message will be sent successfully

This is my code

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) {
    }

Solution

  • The SessionId property is mapped to AMQP message properties.group-id. The Qpid JMS client should map it to JMSXGroupID property, so try the following, createBytesMessage.setStringProperty("JMSXGroupID", "session-1");