SpringBoot快速整合RabbitMQ

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mrqiang9001/article/details/86659220

1 摘要

RabbitMQ 是一款应用广泛、易开发部署的开源消息队列框架,主要用于解决分布式系统中的并发操作。本文将介绍如何在 spring boot 中简易集成 RabbitMQ.

RabbitMQ 官方文档: https://www.rabbitmq.com/documentation.html

2 安装 RabbitMQ 客户端

RabbitMQ 服务是需要在服务器上边安装客户端的,如果没有安装,将无法使用 RabbitMQ

centOS 7 系统: centOS 7 安装 RabbitMQ 教程

Windows 系统: Installing on Windows

macOS 系统: The Homebrew RabbitMQ Formula

3 Maven 依赖

核心 Maven 依赖

../pom.xml
<!-- rabbitmq 消息队列 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
    <version>${springboot.version}</version>
</dependency>

其中 ${springboot.version} 为项目的 springboot 版本,本示例中的版本为:

<springboot.version>2.0.6.RELEASE</springboot.version>

4 配置 RabbitMQ

../demo-web/src/main/resources/application-dev.ym

RabbitMQ 类似于 Redis ,不同的软件环境,可能需要不同的配置,这里以 dev 环境为例

spring:
  # rabbitmq
  rabbitmq:
    host: 192.168.100.100
    port: 5672
    username: rabbitmqadmin
    password: rootpass100

RabbitMQ 属性配置类

../demo-common/src/main/java/com/ljq/demo/springboot/common/config/RabbitMQConfig.java
package com.ljq.demo.springboot.common.config;

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Description: tabbitmq 配置信息
 * @Author: junqiang.lu
 * @Date: 2019/1/21
 */
@Configuration
public class RabbitMQConfig {

    public static final String QUEUE_NAME_DEMO = "rabbitmq_spring_boot_demo";

    @Bean
    public Queue queue(){
        return new Queue(QUEUE_NAME_DEMO);
    }

}

4 RabbitMQ 消息生产者、消费者

RabbitMQ 消息生产者

../demo-common/src/main/java/com/ljq/demo/springboot/common/rabbitmq/RabbitMQSender.java
package com.ljq.demo.springboot.common.rabbitmq;

import com.ljq.demo.springboot.common.config.RabbitMQConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @Description: rabbitMQ 消息发送者
 * @Author: junqiang.lu
 * @Date: 2019/1/21
 */
@Service
public class RabbitMQSender {

    private static final Logger logger = LoggerFactory.getLogger(RabbitMQSender.class);

    @Autowired
    private AmqpTemplate rabbitTemplate;

    public void send(){
        logger.info("sent by RabbitMQ ... ...");
        rabbitTemplate.convertAndSend(RabbitMQConfig.QUEUE_NAME_DEMO, "Hello world ---RabbitMQ demo");
    }

}

RabbitMQ 消息消费者

../demo-common/src/main/java/com/ljq/demo/springboot/common/rabbitmq/RabbitMQReceiver.java
package com.ljq.demo.springboot.common.rabbitmq;

import com.ljq.demo.springboot.common.config.RabbitMQConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @Description: RabbitMQ 消息队列消费者
 * @Author: junqiang.lu
 * @Date: 2019/1/21
 */
@Service
public class RabbitMQReceiver {

    private static final Logger logger = LoggerFactory.getLogger(RabbitMQReceiver.class);

    @Autowired
    private AmqpTemplate rabbitTemplate;

    @RabbitListener(queues = RabbitMQConfig.QUEUE_NAME_DEMO)
    public void receive(String message){
        logger.info("Received < {} >", message);
    }

}

5 调用 RabbitMQ

../demo-web/src/main/java/com/ljq/demo/springboot/web/controller/RabbitMQController.java
package com.ljq.demo.springboot.web.controller;

import com.ljq.demo.springboot.common.api.ApiResult;
import com.ljq.demo.springboot.common.rabbitmq.RabbitMQSender;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description: RabbitMQ 消息队列测试 controller
 * @Author: junqiang.lu
 * @Date: 2019/1/21
 */
@RestController
@RequestMapping(value = "api/demo/rabbitmq")
public class RabbitMQController {

    @Autowired
    private RabbitMQSender rabbitMQSender;

    @RequestMapping(value = "send", method = {RequestMethod.GET, RequestMethod.POST})
    public ApiResult send(){
        rabbitMQSender.send();
        return ApiResult.success();
    }

}

6 测试结果

本地测试接口地址:

http://127.0.0.1:8088/api/demo/rabbitmq/send

测试日志:

2019-01-26 17:09:14:559 [http-nio-8088-exec-3] INFO  com.ljq.demo.springboot.web.acpect.LogAspect(LogAspect.java 66) -[AOP-LOG-START]
	requestMark: f49beb97-311c-4220-807f-806b0dd8353e
	requestIP: 127.0.0.1
	contentType:null
	requestUrl: http://127.0.0.1:8088/api/demo/rabbitmq/send
	requestMethod: GET
	requestParams: null
	targetClassAndMethod: com.ljq.demo.springboot.web.controller.RabbitMQController#send
2019-01-26 17:09:14:561 [http-nio-8088-exec-3] INFO  c.l.demo.springboot.common.rabbitmq.RabbitMQSender(RabbitMQSender.java 24) -sent by RabbitMQ ... ...
2019-01-26 17:09:14:569 [http-nio-8088-exec-3] INFO  com.ljq.demo.springboot.web.acpect.LogAspect(LogAspect.java 74) -[AOP-LOG-END]
	ApiResult(code=1000, msg=成功, data=null)
2019-01-26 17:09:14:576 [SimpleAsyncTaskExecutor-1] INFO  c.l.d.springboot.common.rabbitmq.RabbitMQReceiver(RabbitMQReceiver.java 26) -Received < Hello world ---RabbitMQ demo >

7 参考资料推荐

Spring Boot 揭秘与实战(六) 消息队列篇 - RabbitMQ

Spring Boot中使用RabbitMQ

springboot(八):RabbitMQ详解


Gtihub 源码地址 : https://github.com/Flying9001/springBootDemo
个人公众号:404Code,分享半个互联网人的技术与思考,感兴趣的可以关注.
404Code

猜你喜欢

转载自blog.csdn.net/Mrqiang9001/article/details/86659220