сопоставление свойства jms с RabbitMQ - PullRequest
0 голосов
/ 19 марта 2019

Мы используем пружинную интеграцию для взаимодействия компонентов, используя MQSeries и RabbitMQ.

В MQseries существует множество свойств JMS, которые используются клиентами.

Мы хотели бы добавить промежуточную функцию между входом и выходом, которая отображает эти свойства (получая jms_priority из mqseries и помещая в выходное сообщение свойство «priority» для RabbitMQ).

Без особых свойств JMS работает очень хорошо .

Ниже кода, который мы используем:

<int:channel id="input" ></int:channel>
<int-jms:message-driven-channel-adapter id="jmsIn" connection-factory="connectionFactoryCaching"  channel="input" ...>

<int:service-activator id="sa1" input-channel="input" ref="serviceBean"  output-channel="output"/>
<bean id="serviceBean" class="com.poc.ServiceActivator"> </bean>

<int:channel id="output" ></int:channel>
<int-amqp:outbound-channel-adapter channel="output"  .../>

import org.springframework.amqp.core.MessageProperties;

Код ServiceActivator:

public class ServiceActivator {
    public org.springframework.amqp.core.Message convertMessageMQSeriesToRabbit (Message obj){

        MessageProperties messageProperties = new MessageProperties();
        try {
            messageProperties.setCorrelationId(obj.getJMSCorrelationID());
            System.out.println("getJMSReplyTo "+obj.getJMSReplyTo());
            System.out.println("getJMSPriority "+obj.getJMSPriority());
            messageProperties.setPriority(obj.getJMSPriority());
            System.out.println("getJMSType "+obj.getJMSType());
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }   

Это правильный способ сделать это? В методе convertMessageMQSeriesToRabbit какой тип возвращаемого объекта должен быть передан исходящему? org.springframework.amqp.core.Message?

В этом методе мы хотим заполнить все свойства RabbitMQmessage (content_type, content_encoding, приоритет, correlation_id, reply_to, срок действия, message_id, timestamp, type, user_id, app_id, cluster_id) соответствующим значением JMS.

Нам также нужно сделать это другим способом (inboud rabbitMQ => outq mqseries)

1 Ответ

0 голосов
/ 19 марта 2019

Нет, Spring Integration использует собственную абстракцию org.springframework.messaging.Message<?>. Вам не нужно взаимодействовать с ним напрямую, просто используйте обогащающий заголовок.

См. JmsHeaders и AmqpHeaders для констант.

<header-enricher id="headerEnricherWithShouldSkipNullsFalse" input-channel="fromJms" output-channel="toRabbit">
    <header name="amqp_correlationId" expression="headers.jms_correlationId"/>
    ...
</header-enricher>

Для приоритета AMQP используется стандартное значение IntegrationMessageHeaderAccessor.PRIORITY.

Также см. DefaultAmqpHeaderMapper и DefaultJmsHeaderMapper, чтобы увидеть, как адаптеры отображаются из Message<?> в / из сообщений RabbitMQ и JMS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...