SpringBoot 整合 RabbitMQ demo

Rabbit Windows安装教程
本文只做Demo案例的分享,具体只是需自行百度

一、生产者

1.application.properties

配置Rabbit的基本信息

bash 复制代码
#rabbit 主机IP
spring.rabbitmq.host=127.0.0.1
#rabbit 端口
spring.rabbitmq.port=5672
#rabbit 账号 可自行创建 这里是默认的
spring.rabbitmq.username=guest
#rabbit 密码 可自行创建 这里是默认的
spring.rabbitmq.password=guest
#rabbit 虚拟机地址 可自行指定 这里是默认的
spring.rabbitmq.virtual-host=/
#主程序的端口 和 rabbit无关
server.port=8081

2.pom文件

导入两个maven依赖

第一个是SpringBoot集成的rabbit

第二个是web依赖,用来方便发消息

xml 复制代码
<!--RabbitMq-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!--Web 方便用来发消息-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

3.Rabbit配置类

这里用的是主题模式,也就是模糊匹配的模式

这里设置的是只要是rabbit.开头就会进入这个队列
更详细的方法意义 请自行百度

java 复制代码
@Configuration
public class RabbitConfig {

    public static final String EXCHANGE_NAME = "rabbit_exchange";
    public static final String QUEUE_NAME = "rabbit_queue";
    /**
     * 创建交换机
     * ExchangeBuilder有四种交换机模式
	 * Direct Exchange:直连交换机,根据Routing Key(路由键)进行投递到不同队列。
     * Fanout Exchange:扇形交换机,采用广播模式,根据绑定的交换机,路由到与之对应的所有队列。
     * Topic Exchange:主题交换机,对路由键进行模式匹配后进行投递,符号#表示一个或多个词,*表示一个词。
     * Header Exchange:头交换机,不处理路由键。而是根据发送的消息内容中的headers属性进行匹配。
     * durable 交换器是否持久化(false 不持久化,true 持久化)
     **/
    @Bean
    public Exchange rabbitExchange(){
        return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
    }
	/**
	 * 创建队列
	 * durable 队列是否持久化 队列调用此方法就是持久化 可查看方法的源码
	 * deliveryMode 消息是否持久化(1 不持久化,2 持久化)
	 **/
    @Bean
    public Queue rabbitQueue(){
        return QueueBuilder.durable(QUEUE_NAME).build();
    }
	/**
	* 绑定交换机和队列
	* bing 方法参数可以是队列和交换机
	* to 方法参数必须是交换机
	* with 方法参数是路由Key 这里是以rabbit.开头
	* noargs 就是不要参数的意思
	* 这个方法的意思是把rabbit开头的消息 和 上面的队列 和 上面的交换机绑定
	**/
    @Bean
    public Binding rabbitBinding(@Qualifier("rabbitExchange") Exchange exchange, @Qualifier("rabbitQueue") Queue queue){
        return BindingBuilder.bind(queue).to(exchange).with("rabbit.#").noargs();
    }

}

4.Controller

这里整一个网页调用的形式进行发送信息

java 复制代码
@RestController
public class ProducerWebController {

    @Autowired
    ProducerService producerService;

    @RequestMapping("/sendMq")
    public String sendMq(@RequestParam("mq") String mq){
        return producerService.sendMq(mq);
    }

}

5.Service

在service层注入RabbitTemplate

convertAndSend 即是消息发送的方法

java 复制代码
public interface ProducerService {
    public String sendMq(String mq);
}
java 复制代码
@Service
public class ProducerServiceImpl implements ProducerService {

    @Autowired
    RabbitTemplate rabbitTemplate;

	/**
	* convertAndSend 参数
	* 第一个是交换机的名字
	* 第二个是队列的具体名字 因为是rabbit开头 因为RabbitConfig设置rabbit开头通配 所以会被监听到
	* 第三个是具体的消息
	**/
    @Override
    public String sendMq(String mq) {
        rabbitTemplate.convertAndSend(RabbitConfig.EXCHANGE_NAME, "rabbit.demo", mq);
        return "发送成功,消息是:" + mq;
    }
}

6.发送消息

启动生产者程序

浏览器输入 127.0.0.1/sendMq?mq=测试

二、消费者

1.application.properties

bash 复制代码
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/
server.port=8082

2.Rabbit监听

只需要在消费者中创建一个监听即可监听到队列的消息

可以直接打印出Message消息

java 复制代码
@Component
public class ConsumerListener {

	/**
	* 设置监听哪一个队列 这个队列是RabbitConfig里面设置好的队列名字
	**/
    @RabbitListener(queues = "rabbit_queue")
    public void listenQueue(Message message){
        System.out.println(new String(message.getBody()));
    }

}
相关推荐
海里真的有鱼14 分钟前
Spring Boot 项目中整合 RabbitMQ,使用死信队列(Dead Letter Exchange, DLX)实现延迟队列功能
开发语言·后端·rabbitmq
工业甲酰苯胺25 分钟前
Spring Boot 整合 MyBatis 的详细步骤(两种方式)
spring boot·后端·mybatis
码上一元1 小时前
消息队列:如何确保消息不会丢失?
kafka·消息队列·rocketmq
m0_635502202 小时前
Spring Cloud Gateway组件
网关·微服务·负载均衡·过滤器
bjzhang752 小时前
SpringBoot开发——集成Tess4j实现OCR图像文字识别
spring boot·ocr·tess4j
flying jiang2 小时前
Spring Boot 入门面试五道题
spring boot
小菜yh2 小时前
关于Redis
java·数据库·spring boot·redis·spring·缓存
爱上语文4 小时前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
荆州克莱4 小时前
springcloud整合nacos、sentinal、springcloud-gateway,springboot security、oauth2总结
spring boot·spring·spring cloud·css3·技术
小宋10214 小时前
玩转RabbitMQ声明队列交换机、消息转换器
服务器·分布式·rabbitmq