我是RabbitMQ和Spring Integration的新手。
我有一个用例来从通道中使用JSON消息,将其转换为对象。我需要在对象中设置的一个字段是我们从rabbitMQ收到的消息的消息Id(delivery.getEnvelope(。getDeliveryTag()),我们需要在所有业务逻辑之后进行ack处理。
如何使用弹簧集成进行操作? 这是我的xml配置。
<bean id="devRabbitmqConnectionFactory" class="com.rabbitmq.client.ConnectionFactory">
<property name="brokerURL" value="#{props[rabbitmq_inputjms_url]}" />
<property name="redeliveryPolicy" ref="redeliveryPolicy" />
</bean>
<bean id="devJMSCachingConnectionFactory"
class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="devRabbitmqConnectionFactory" />
<property name="sessionCacheSize" value="10" />
<property name="cacheProducers" value="false" />
</bean>
<int-jms:channel id="devJMSChannel" acknowledge="transacted"
connection-factory="devJMSCachingConnectionFactory" message-driven="false"
queue-name="devJMSChannel">
</int-jms:channel>
<bean id="redeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy">
<property name="initialRedeliveryDelay" value="5000" />
<property name="maximumRedeliveries" value="5" />
</bean>
<int:transformer id="devObjectTransformer" input-channel="devJMSChannel" ref="devService" method="readEventFromRabbitMQ"
output-channel="devPacketChannel">
<int:poller fixed-rate="10" task-executor="devObjectTransformerExecutor" />
</int:transformer>
变压器方法&#34; readEventFromRabbitMQ&#34;从msg.getPayload()获取消息字符串将其转换为对象并将其发送到输出通道。但不确定如何在变换器类中获取消息Id。有人可以帮我吗?
public List<DevEventRecord> readEventFromRabbitMQ(Message<EventsDetail> msg){
DevEventRecord[] eventRecords=null;
EventsDetail expEvent = null;
long receivedTime =System.currentTimeMillis();
int packetId = -1;
try{
monitorBean.incrementDeviceExceptionPacketCount();
expEvent = msg.getPayload();
LogUtil.debug("readExceptionEvent :: consumed JMS Q "+expEvent);
eventRecords = dispatchPacket(expEvent);
}
catch(ProcessingException pe){
notifyAck(expEvent.getUniqueId(),,,,);
}
catch(Exception ex){
notifyAck(expEvent.getUniqueId(),,,,);
LogUtil.error("Exception occured while reading object in readEvent , "+ex.toString());
}
return getEventRecordList(eventRecords);
}
答案 0 :(得分:0)
deliveryTag
在密钥<int-amqp:inbound-channel-adapter>
下的AmqpHeaders.DELIVERY_TAG
后显示为邮件标题。
我不明白为什么要混用AMQP
和JMS
,但无论如何,这些渠道实施都不会从收到的邮件中填充标题。这是出于他们的反应。
请使用<int-amqp:inbound-channel-adapter>
,sample ack
如何使用deliveryTag
标题手动{{1}}消息。