程序员社区

SpringBoot整合RabbitMQ

> Hello,欢迎来到程序员社区。 今天聊一聊 SpringBoot整合RabbitMQ,希望对大家有所帮助。

Java面试手册PDF下载:[点击下载最全Java面试手册](http://117.78.51.75/219-2)

写在前面

如果对你有帮助,请给点个关注和点个赞哦,嘿嘿嘿
MQ全称为Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。而RabbitMQ是实现了高级消息队列协议的开源消息代理软件。RabbitMQ服务器是用Erlang语言编写的,而聚类和故障转移是构建在开放电信平台框架上的。

部署RabbitMQ

首先在用SpringBoot集成RabbitMQ之前呢,我们当然需要先部署一个Ra编程电子书汇总bbitMQ啦,你可以选择自己电脑安装,但是我还是比较推荐使用Docker进行部署的,比较方便,Docker部署RabbitMQ比较方便,这里我教一下如何使用Docker部署RabbitMQ,我使用的操作系统是Ubuntu19,首先把RabbitMQ的镜像pull下来,注意pull镜像的时候要获取management版本的,不要获取last版本的,management版本的才带有管理界面,比如

docker pull rabbitmq:3.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/ 访问控制台
SpringBoot整合RabbitMQ插图
SpringBoot整合RabbitMQ插图1
这里简单描述下上图中控制台的列表的作用:

  • 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 " + new Date();
        System.out.println("Sender : " + context);
        this.rabbitTemplate.convertAndSend("hello", context);
    }
}
import org.springframework.amqp.rabbit.annotaJava面试手册tion.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListen编程电子书汇总er;
import org.springframework.stereotype.Component;

@Component
@RabbitListener(queues = "hello")
public class HelloReceiver {

    @RabbitHandler
    public void process(String hello){
        System.out.println("R编程电子书汇总eceiver : " + hello);
    }
}
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabJava面试手册bitConfig {
    @Bean
    public Queue helloQueue(){
        return new Queue("hello");
    }
}

测试及结果

这里测试发送的消息直接是 String 类型的,你也可以测试下 Bean 类,这需要注意需要序列化。

@Autowired
private HelloSender helloSender;
@Test
public void hello() throws Exception {
	helloSender.send();
}

SpringBoot整合RabbitMQ插图2
SpringBoot整合RabbitMQ插图3
SpringBoot整合RabbitMQ插图4

> 时间不一定能证明很多东西,但是一定能看透很多东西。坚信自己的选择,不动摇,使劲跑,明天会更好。

赞(0) 打赏
未经允许不得转载:IDEA激活码 » SpringBoot整合RabbitMQ

一个分享Java & Python知识的社区