我们使用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)
答案 0 :(得分:0)
否,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 messageds。