如何使用Spring Integration从Java bean正确创建RabbitMQ自定义消息?

时间:2015-11-13 23:31:06

标签: java spring rabbitmq spring-integration

我是Spring Integration的新手,也许这个问题很简单。我正在查看从stdin:

创建RabbitMq消息的示例(https://github.com/spring-projects/spring-integration-samples/tree/master/basic/amqp
<int-stream:stdin-channel-adapter id="consoleIn"
    channel="toRabbit">
    <int:poller fixed-delay="1000" max-messages-per-poll="1" />
</int-stream:stdin-channel-adapter>
<int:channel id="toRabbit" />
<int-amqp:outbound-channel-adapter
    channel="toRabbit" amqp-template="amqpTemplate"
    exchange-name-expression="payload.toLowerCase() == 'nack' ? 'badExchange' : 'si.test.exchange'"
    routing-key-expression="payload.toLowerCase() == 'fail' ? 'badKey' : 'si.test.binding'"
    confirm-correlation-expression="payload"
    confirm-ack-channel="good"
    confirm-nack-channel="errors"
    return-channel="returns" />

如果我们需要使用Java代码生成自定义消息,该怎么办?什么是优雅的代码?填充消息的bean被简化了:

package com.mycompany.domain.price;    
public class UpdateMessage implements Serializable {
Date effStartDate;
Date effEndDate;
Long orderId = -1;
String customerFullName;
...
}

1 个答案:

答案 0 :(得分:1)

this answer;虽然它是在谈论Axis而不是RabbitMQ;相同的技术适用。

由于您的UpdateMessage实施Serializable,标准邮件转换器会为您转换为byte[]

发送没有回复的邮件,您的网关接口方法可能是

public void send(UpdateMessage msg);

在这种情况下,您使用出站通道适配器。如果要获得回复,请使用amqp出站网关,服务接口可能看起来像

public UpdateResult send(UpdateMessage msg);

如果您不使用Serializable个对象,则可能需要使用json转换器。