Springboot整合RabbitMQ
通过springboot整合RabbitMQ可以极大的简化MQ使用步骤
以下是生产者和消费者两个工程的基本实现步骤
生产者工程:
-
application.yml文件配置RabbitMQ相关信息;
-
在生产者工程中编写配置类,用于创建交换机和队列,并进行绑定
-
注入RabbitTemplate对象,通过RabbitTemplate对象发送消息到交换机
消费者工程:
-
application.yml文件配置RabbitMQ相关信息
-
创建消息处理类,用于接收队列中的消息并进行处理
生产者工程
application.yml文件配置RabbitMQ相关信息
#配置rabbitmq的基本信息 : ip 端口 账号和密码
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
virtual-host: /
在生产者工程中编写配置类,用于创建交换机和队列,并进行绑定
package com.springbootrabbitmq.rabbitmqproducer.promess;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitMQConfig {
// 定义交换机名字
public static final String EXCHANGE_NAME = "boot_topic_exchange";
// 定义队列名字
public static final String QUEUE_NAME = "boot_queue";
// 交换机,这里的例子是通配符模式
@Bean("bootExchange")
public Exchange bootExchange() {
return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
}
// 队列
@Bean("bootQueue")
public Queue bootQueue() {
return QueueBuilder.durable(QUEUE_NAME).build();
}
// 交换机和队列进行绑定
/*
* 1、知道哪个交换机
* 2、知道哪个队列
* 3、知道routing key
* */
@Bean
public Binding bindQueueExchange(@Qualifier("bootQueue") Queue queue, @Qualifier("bootExchange") Exchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("boot.#").noargs();
}
}
注入RabbitTemplate对象,通过RabbitTemplate对象发送消息到交换机
package com.springbootrabbitmq.rabbitmqproducer.controller;
import com.springbootrabbitmq.rabbitmqproducer.promess.RabbitMQConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;
@Controller
public class ConvertMess {
@Autowired
RabbitTemplate rabbitTemplate;
@RequestMapping("/aa")
@ResponseBody
void contextLoads() {
rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, "boot.haha", "我是谁");
}
}
消费者工程
application.yml文件配置RabbitMQ相关信息
#配置rabbitmq的基本信息 : ip 端口 账号和密码
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
virtual-host: /
创建消息处理类,用于接收队列中的消息并进行处理
package com.springbootrabbitmq.rabbitmqconsumer.conmess;
import com.springbootrabbitmq.rabbitmqproducer.promess.RabbitMQConfig;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class RabbitMQListener {
/*
*
* queues = RabbitMQConfig.QUEUE_NAME 是生产者中的队列名
*
* */
@RabbitListener(queues = RabbitMQConfig.QUEUE_NAME)
public void ListenerQueue(Message message) {
System.out.println(new String(message.getBody()));
}
}