好久没有写博客了,现在写一个自己整合rabbitmq 和springboot 相关的例子。
rabbitmq的优点,为啥要使用rabbitmq,以及rabbitmq的安装使用这里都不写了,如果不清楚可以自行百度。
废话不说下面开始代码
@RestController public class rabbtimqController { @Autowired private AmqpTemplate amqpTemplate; @RequestMapping("/send") public void send(){ this.amqpTemplate.convertAndSend("direct_queue", "message11"); } }
直接在controller层写生产者的代码,整合很简单主要代码就下面的一行,一个参数是 消息队列的key ,一个参数是消息本身。
this.amqpTemplate.convertAndSend("direct_queue", "message11");
下面开始消费者的代码
@Component public class RabbitMqReceive { // queues是指要监听的队列的名字 @RabbitListener(queues = RabbitMQConfig.QUEUE) public void receiverDirectQueue(String msg, Channel channel, Message message) { System.out.println("【receiverDirectQueue监听到消息】" + msg); try { channel.basicAck(message.getMessageProperties().getDeliveryTag(),false); System.out.println("【receiverDirectQueue监听到消息】++++ success"); }catch (Exception e){ System.out.println("【receiverDirectQueue监听到消息】++++ fail"); } } }
这里实行关闭mq的自动确认机制,实行消息手动确认
channel.basicAck(message.getMessageProperties().getDeliveryTag(),false); 通过这个代码实现
下面的 是配置类
@Configuration public class RabbitMQConfig { public static final String QUEUE = "direct_queue"; /** * Direct模式 * * @return */ @Bean public Queue directQueue() { // 第一个参数是队列名字, 第二个参数是指是否持久化 return new Queue(QUEUE, true); } }
下面是 yml的代码
server: port: 7080 spring: rabbitmq: host: localhost port: 5672 username: guest password: guest #publisher-returns: true # #publisher-confirms: true listener: simple: acknowledge-mode: manual #