Uploaded image for project: 'AMQ Broker'
  1. AMQ Broker
  2. ENTMQBR-909

ExpiryQueue protocol interoperability issues

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Obsolete
    • Icon: Major Major
    • None
    • AMQ 7.1.0.GA
    • None
    • Hide
      1. Send a message to an address using one protocol, set short TTL for the message.
      2. Receive the message from the ExpiryQueue
      3. Compare the sent and received messages, think what changed, decide if it is reasonable or not.
      1. git clone git://github.com/jdanekrh/cli-java.git
      2. git checkout jd_interop
      3. Start a broker on localhost, have address autocreation enabled, no authentication
      4. Something like mvn -Pinterop-tests test, but it makes more sense to run InteropTest#`send browse receive expired durable message` in the IDE (which splits output from individual tests and gives a treeview to switch between them), otherwise the output is one huge mess.
      Show
      Send a message to an address using one protocol, set short TTL for the message. Receive the message from the ExpiryQueue Compare the sent and received messages, think what changed, decide if it is reasonable or not. git clone git://github.com/jdanekrh/cli-java.git git checkout jd_interop Start a broker on localhost, have address autocreation enabled, no authentication Something like mvn -Pinterop-tests test , but it makes more sense to run InteropTest#`send browse receive expired durable message` in the IDE (which splits output from individual tests and gives a treeview to switch between them), otherwise the output is one huge mess.

      Here are the things I think are a problem. The headline says from what sender -> to what receiver the message was sent and received. Every time the message went through the ExpiryQueue.

      AMQP -> AMQP

      durable=true -> durable=false
      

      The extra properties shown in AMQP -> Core are missing here completely, the info in them is lost to the user except for the original address, because the address on the received message is not ExpiryQueue, but the queue where it was delivered originally

      AMQP -> Core

      id=b8a4d020-e9af-4149-a9a0-ff25d40fa4b4:1:1:1-1 -> id=null
      

      There are the following properties added by the broker

          'JMS_AMQP_MA__AMQ_ACTUAL_EXPIRY': 1510307891227,
          'JMS_AMQP_MA__AMQ_ORIG_MESSAGE_ID': 3870,
          'JMS_AMQP_MA__AMQ_ORIG_ADDRESS':'interopTestAddress-send_browse_receive_expired_durable_message-aac-acc-d4lt0g0macff9qqdn14gqilg77',
          'NATIVE_MESSAGE_ID': 'ID:b8a4d020-e9af-4149-a9a0-ff25d40fa4b4:1:1:1-1',
          'JMS_AMQP_MA_x-opt-jms-dest': 0,
          'JMS_AMQP_MA__AMQ_ORIG_QUEUE': 'interopTestAddress-send_browse_receive_expired_durable_message-aac-acc-d4lt0g0macff9qqdn14gqilg77'
      

      AMQP -> OpenWire

          group-sequence=0 -> group-sequence=-1
          id=09e95d0f-4c80-46c7-8c35-e0531f3c38c7:1:1:1-1 -> id=dd623d5f-c5fd-11e7-99c6-8e7de8fbb9e6:0:0:-1
      

      OpenWire -> AMQP

      address=interopTestAddress-send_browse_receive_expired_durable_message-acc-aac-4nppc8p8mr1jnppe585142qke3 -> address=ExpiryQueue

      The extra properties that were on AMQP -> Core are essentially here, but different ones or the keys are different

          '_AMQ_ORIG_QUEUE': 'interopTestAddress-send_browse_receive_expired_durable_message-acc-aac-4nppc8p8mr1jnppe585142qke3',
          '_AMQ_ORIG_ADDRESS': 'interopTestAddress-send_browse_receive_expired_durable_message-acc-aac-4nppc8p8mr1jnppe585142qke3',
          '_AMQ_ORIG_MESSAGE_ID': 4040,
          '_AMQ_ACTUAL_EXPIRY': 1510307981227
      

      I am not mentioning the changes in extra properties from now on, to keep the description of manageable length.

      Core -> AMQP,OpenWire,Core

      address=interopTestAddress-send_browse_receive_expired_durable_message-acc-aac-4nppc8p8mr1jnppe585142qke3 -> address=ExpiryQueue
      

      OpenWire -> AMQP,OpenWire,Core

      address=interopTestAddress-send_browse_receive_expired_durable_message-acc-aac-4nppc8p8mr1jnppe585142qke3 -> address=ExpiryQueue
      

      When the source is OpenWire, some values of message fields end up of type amqp:Binary (when receiver protocol is AMQP), or some other representation of binary (With Core), and the content seems to be the value encoded with OpenWire encoding. Sending Openwire -> Openwire does work.

      Example of Openwire -> Core: received value '__HDR_MESSAGE_ID': ' Hn �{� !ID:nixos-41687-1510307928511-15:1 � � � ',, the spaces are some nonprintable ASCII. This is reported elsewhere, as OpenWire interoperablity issue.

              rh-ee-ataylor Andy Taylor
              jdanek@redhat.com Jiri Daněk
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved: