Spring 集成 java 配置
Spring integration java config
EmailQueueListener
@Component
public class EmailQueueListener{
public String handleMessage(String string) {
System.out.println("Message printing"); // this was printed several times
System.out.println(rabbitTemplate.receiveAndConvert()); //received null here
return string;
}
}
配置
@Configuration
public class RabbitMQConfiguration {
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory =
new CachingConnectionFactory("localhost");
return connectionFactory;
}
@Bean
public AmqpAdmin amqpAdmin() {
RabbitAdmin admin=new RabbitAdmin(connectionFactory());
admin.declareQueue(queue());
return admin;
}
@Bean
public RabbitTemplate rabbitTemplate() {
RabbitTemplate rabbitTemplate=new RabbitTemplate(connectionFactory());
rabbitTemplate.setRoutingKey("eventsQueue");
rabbitTemplate.setQueue("eventsQueue");
return rabbitTemplate;
}
@Bean
public Queue queue() {
return new Queue("eventsQueue");
}
@Bean
@Autowired
public SimpleMessageListenerContainer messageListenerContainer(EmailQueueListener listener){
SimpleMessageListenerContainer container=new SimpleMessageListenerContainer(connectionFactory());
MessageListenerAdapter adapter=new MessageListenerAdapter(listener, "handleMessage");
container.setMessageListener(adapter);
container.addQueues(queue());
return container;
}
}
发件人
rabbitTemplate.convertAndSend("hello");
我根据你说的更新了代码。但这是行不通的。我看不到我在 Listener 方法中打印到控制台的消息。他们在我的配置中有什么问题吗
这是注册任何 POJO 侦听器的另一个选项:
@Bean
public SimpleMessageListenerContainer serviceListenerContainer() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(rabbitConnectionFactory());
container.setQueues(requestQueue());
container.setMessageListener(new MessageListenerAdapter(new PojoListener()));
return container;
}
其中 PojoListener
是:
public class PojoListener {
public String handleMessage(String foo) {
return foo.toUpperCase();
}
}
对于 MessageListener
实现,您应该使用 org.springframework.amqp.support.converter.MessageConverter
提取 Message
body
并将其转换为所需的域对象。
EmailQueueListener
@Component
public class EmailQueueListener{
public String handleMessage(String string) {
System.out.println("Message printing"); // this was printed several times
System.out.println(rabbitTemplate.receiveAndConvert()); //received null here
return string;
}
}
配置
@Configuration
public class RabbitMQConfiguration {
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory =
new CachingConnectionFactory("localhost");
return connectionFactory;
}
@Bean
public AmqpAdmin amqpAdmin() {
RabbitAdmin admin=new RabbitAdmin(connectionFactory());
admin.declareQueue(queue());
return admin;
}
@Bean
public RabbitTemplate rabbitTemplate() {
RabbitTemplate rabbitTemplate=new RabbitTemplate(connectionFactory());
rabbitTemplate.setRoutingKey("eventsQueue");
rabbitTemplate.setQueue("eventsQueue");
return rabbitTemplate;
}
@Bean
public Queue queue() {
return new Queue("eventsQueue");
}
@Bean
@Autowired
public SimpleMessageListenerContainer messageListenerContainer(EmailQueueListener listener){
SimpleMessageListenerContainer container=new SimpleMessageListenerContainer(connectionFactory());
MessageListenerAdapter adapter=new MessageListenerAdapter(listener, "handleMessage");
container.setMessageListener(adapter);
container.addQueues(queue());
return container;
}
}
发件人
rabbitTemplate.convertAndSend("hello");
我根据你说的更新了代码。但这是行不通的。我看不到我在 Listener 方法中打印到控制台的消息。他们在我的配置中有什么问题吗
这是注册任何 POJO 侦听器的另一个选项:
@Bean
public SimpleMessageListenerContainer serviceListenerContainer() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(rabbitConnectionFactory());
container.setQueues(requestQueue());
container.setMessageListener(new MessageListenerAdapter(new PojoListener()));
return container;
}
其中 PojoListener
是:
public class PojoListener {
public String handleMessage(String foo) {
return foo.toUpperCase();
}
}
对于 MessageListener
实现,您应该使用 org.springframework.amqp.support.converter.MessageConverter
提取 Message
body
并将其转换为所需的域对象。