Hello,欢迎来到程序员社区。 今天聊一聊 SpringBoot整合Rabb编程电子书汇总itMQ,希望对大家有所帮助。
Java面试手册PDF下载:点击下载最全Java面试手册
写在前面
如果对你有帮助,请给点个关注和点个赞哦,嘿嘿嘿
MQ全称为Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。而RabbitMQ是实现了高级消息队列协议的开源消息代理软件。RabbitMQ服务器是用Erlang语言编写的,而聚类和故障转移是构建在开放电信平台框架上的。
部署RabbitMQ
首先在用SpringBoot集成RabbitMQ之前呢,我们当然需要先部署一个RabbitMQ啦,你可以选择自己电脑安装,但是我还是比较推荐使用Docker进行部署的,比较方便,Docker部署RabbitMQ比较方便,这里我教一下如何使用Docker部署RabbitMQ,我使用的操作系统是Ubuntu19,首先把RabbitMQ的镜像pull下来,注意pull镜像的时候要获取management版本的,不要获取last版本的,management版本的才带有管理界面,比如
docker pull rabbitmq:3.Java面试手册8.2-management
等待pull下来,pull下来之后,我们就可以直接运行了(这里只是简单的安装了一个单点Rabbitmq,如果要部署集群,当然没有这么简单啦,可以看我另一篇博文),运行的命令如下:
docker run -d -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --name rabbitmq rabbitmq:3.8.2-management
该镜像拥有一个基于 web 的控制台和 Http API。Http API 可以在地址看到如何使用:http://localhost:15672/api/
,这里说明一下指令选项
- 15672 :表示 RabbitMQ 控制台端口号,可以在浏览器中通过控制台来执行 RabbitMQ 的相关操作。
- 5672 : 表示 RabbitMQ 所监听的 TCP 端口号,应用程序可通过该端口与 RabbitMQ 建立 TCP 连接,并完成后续的异步消息通信
- RABBITMQDEFAULTUSER:用于设置登陆控制台的用户名,这里我设置 admin
- RABBITMQDEFAULTPASS:用于设置登陆控制台的密码,这里我设置 admin
容器启动成功后,可以在浏览器输入地址:http://ip地址:15672/ 访问控制台
这里简单描述下上图中控制台的列表的作用:
- Overview :用于查看 RabbitMQ 的一些基本信息(消息队列、消息发送速率、节点、端口和上下文信息等)
- Connections:用于查看 RabbitMQ 客户端的连接信息
- Channels:用户查看 RabbitMQ 的通道信息
- Exchange:用于查看 RabbitMQ 交换机
- Queues:用于查看 RabbitMQ 的队列
- Admin:用于管理用户,可增加用户
SpringBoot整合RabbitMQ
首先使用Idea创建一个只包含web模块的项目,然后引入rabbitmq的依赖,依赖如下:
dependency>
groupId>org.springframework.boot/groupId>
artifactId>spring-boot-starter-amqp/artifactId>
/dependency>
然后我们在application.properties主配置文件中进行如下配置
spring.rabbitmq.host=xxxxxxip地址
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
然后接下来我们写一个针对RabbitMQ的配置文件(用来管理消息队列),以及一个Sender和一个Receiver,具体内容如下:
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class HelloSender {
@Autowired
private AmqpTemplate rabbitTemplate;
public void send(){
String context = "hello " + Java面试手册new Date();
System.out.println("Sender : " + context);
this.rabbitTemplate.convertAndSend("hell编程电子书汇总o", context);
}
}
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "hello")
public class HelloReceiver {
@RabbitHandler
public void process(String hello){
System.out.println("Receiver : " + hello);
}
编程电子书汇总}
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitConfig {
@Bean
public Queue helloQueue(){
return new Queue("hello");
}
}
测试及结果
这里测试发送的消息直接是 String 类型的,你也可以测试下 Bean 类,这需要注意需要序列化。
@Autowired
private HelloSender helloSender;
@Test
public void hello() throws Exception {
helloSender.send();
}
> 时间不一定能证明很多东西,但是一定能看透很多东西。坚信自己的选择,不动摇,使劲跑,明天会更好。