将jms属性映射到RabbitMQ

时间:2019-03-19 10:48:19

标签: spring-integration

我们使用spring集成来使用MQSeries和RabbitMQ交流组件。

使用MQseries,客户可以使用许多JMS属性。

我们想在输入和输出之间添加一个中间函数,以对这些属性进行映射(从mqseries获取jms_priority,并将输出消息的RabbitMQ属性设置为“ priority”。)

没有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吗?

在这种方法中,我们要用相应的JMS值填充所有RabbitMQmessage属性(content_type,content_encoding,优先级,correlation_id,reply_to,到期时间,message_id,时间戳,类型,user_id,app_id,cluster_id)。

我们还需要另一种方式(收录RabbitMQ =>出站mqseries)

1 个答案:

答案 0 :(得分:0)

否,Spring Integration使用其自己的抽象org.springframework.messaging.Message<?>。您不需要直接与它进行交互,只需使用标题增强器即可。

有关常量,请参见JmsHeadersAmqpHeaders

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

对于AMQP优先级,使用标准IntegrationMessageHeaderAccessor.PRIORITY值。

另请参阅DefaultAmqpHeaderMapperDefaultJmsHeaderMapper,以了解适配器如何从Message<?>映射到RabbitMQ和JMS messageds。