Spring整合RabbitMQ

Spring整合RabbitMQ

导入依赖

        
            org.springframework.amqp
            spring-rabbit
            2.1.10.RELEASE
        
        
            com.fasterxml.jackson.core
            jackson-databind
            2.10.2
        

生产者端配置











    
        
    














//对消息是否发送到交换机进行监听
public class OrderConfirmListener implements RabbitTemplate.ConfirmCallback {
    @Override
    public void confirm(CorrelationData correlationData, boolean b, String s) {
        System.out.println("消息的tag:" + correlationData.getId());
        System.out.println("接收到的消息" + s);
    }
}
//对消息是否从交换机发送到队列进行监听
public class OderReturnListener implements RabbitTemplate.ReturnCallback {
    @Override
    public void returnedMessage(Message message, int i, String s, String s1, String s2) {
        System.out.println("返回的错误编码:"+i);
        System.out.println("返回的错误消息:"+s);
        System.out.println("交换机:"+s1);
        System.out.println("路由key");
        System.out.println("返回的消息:"+new String(message.getBody()));
    }
}

通过配置文件指定监听返回处理类和方法,有人和我说是可以的,但是我没测试出来,貌似是版本问题,而且从理论上讲没理由不行的,如果有大佬发现我哪里配错了并且不嫌麻烦告诉我的话,万分感激,另外可以通过配置类的方式来实现监听,我在下一篇springboot的配置中再来说明。

消费者端配置




    




注:因为在生产者端已经声明了交换机和队列,这里就不需要再声明了,当然如果消息队列中并没有预先创建交换机和队列,这里又先运行消费者端则会报错,原因是消费者端找不到队列,所以为了保险,消费者端也可以声明交换机和队列

测试代码

@ContextConfiguration(value = "classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class AppTest {
    @Autowired
    private OrderProducer producer;
    @Test
    public void shouldAnswerWithTrue() {
        Orders orders = new Orders();
        orders.setCreateTime(new Date());
        orders.setOrderNo(10001);
        producer.sendOrder("hello."+orders.getCreateTime(),orders);
    }
}

接收消息代码

    public void recv(Orders orders){
        System.out.println("接收到的数据:"+orders.getCreateTime());
        System.out.println("接收到的数据:"+orders.getOrderNo());
    }

你可能感兴趣的:(rabbitmq,java,spring,队列,交换机)