锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

RabbitMQ快速入门

时间:2023-09-29 06:37:02 1fa0连接器

RabbitMq

MQ有很多框架,比较流行RabbitMq、ActiveMq、ZeroMq、kafka,阿里开源RocketMQ。 本文主要介绍RabbitMq RabbitMQ是以AMQP协议实现的消息中间件产品。 AMQP是Advanced Message Queuing Protocol的简称,它是一个面向消息中间件的开放式标准应用层协议。


一、消息对列应用场景:

RabbitMQ主要用于解决异步处理、应用解耦、流量切割等问题,实现高性能、高可用性、可伸缩性和最终一致性结构。

1.异步处理

传统方式系统的性能(并发量、吞吐量、响应时间)会出现瓶颈, 通过使用消息队列,我们可以异步处理请求,以减轻系统的压力。消息队列通知消息接收方异步处理不需要同步处理的请求。减少了应用程序的响应时间。

2.应用解耦

在项目开始时,很难预测未来会遇到什么困难。在处理过程中在处理过程中插入了一个基于数据的隐含接口层,两侧都实现了接口,只要两侧遵守相同的接口约束,就可以独立修改或扩展两侧的处理过程。

3.流量削锋

在访问量急剧增加的情况下,但应用程序仍然需要发挥作用,但这种紧急流量并不常见。使用消息中间件以队列的形式可以减少紧急访问压力,而不会因紧急超时负荷要求而崩溃

4.日志处理

日志处理是指在日志处理中使用消息队列,例如Kafka解决大量日志传输问题的应用
1.日志收集客户端,负责日志数据收集,定期写入Kafka队列
2.Kafka负责日志数据的接收、存储和转发
3.日志处理应用:订阅和消费kafka队列中的日志数据


二、RabbitMQ快速入门

RabbitMQ是由erlang基于语言开发AMQP(Advanced Message Queue 实现高级消息队列协议的消息队列是应用程序之间的通信方式,广泛应用于分布式系统的开发中。RabbitMQ官方地址:http://www.rabbitmq.com

2.1: Docker安装部署RabbitMQ

获取镜像时要注意获取镜像management不要获得版本last版本的,management版本有管理界面

docker pull rabbitmq:management 

2.2: 运行镜像

设置用户名和密码

docker run -d \      --name my-rabbitmq \      -p 5672:5672 -p 15672:15672 \      -v /data/rabbitmq:/var/lib/rabbitmq \      --hostname my-rabbitmq-host \      -e RABBITMQ_DEFAULT_VHOST=my_vhost \      -e RABBITMQ_DEFAULT_USER=admin \      -e RABBITMQ_DEFAULT_PASS=admin \      --restart=always \      rabbitmq:management  

命令解释:

-d:容器在后台运行
-name:指定容器名
-p:指定服务运行端口(5672:应用访问端口;15672:控制台Web端口号)
-v:数据卷容器启动映射目录或文件,数据卷路径为:/var/lib/rabbitmq,然后将此数据卷映射到住宿主机/data目录
–hostname:主机名(RabbitMQ一个重要的注意事项是基于所谓的 节点名 存储数据,默认为主机名)
-e:指定环境变量;(RABBITMQ_DEFAULT_VHOST:虚拟机名默认;RABBITMQ_DEFAULT_USER:默认用户名;RABBITMQ_DEFAULT_PASS:默认用户名密码)
–restart=always:当Docker重启时,容器可以自动启动
rabbitmq:management:镜像名

2.3: RabbitMQ管理平台

记得在虚拟机中打开端口号

后台地址:http://[宿主机IP]:15672

2.4: RabbitMQ关键名词

Server(Broker):接收客户端连接,实现AMQP协议的信息队列和路由功能进程;
Virtual Host:虚拟主机的概念,类似于权限控制组,一个Virtual Host里面可以有Exchange和Queue。
Exchange:交换机,接收制造商发送的信息,并根据Routing Key将消息路由到服务器中的队列Queue。
ExchangeType:交换机的类型决定了路由消息行为,RabbitMQ有三种类型Exchange,分别是fanout、direct、topic;
Message Queue:消息队列用于存储尚未被消费者消费的消息;
Message:由Header和body组成,Header各种属性由生产者添加,包括Message是否持久,优先级是多少,由哪个Message
Queue接收等;body是真正需要发送的数据内容;
BindingKey:绑定关键字,特定的Exchange和一个特定的Queue绑定起来。

2.5: MQ的核心概念

生产者、队列、消费者

     创建消息                  读取消息    生产者------------>队列<-----------消费者 

生产者生产并将信息交付到队列中,
消费者可以从队列中获取消息并消费,
新闻是指每个服务之间要传递的数据

三、springboot整合RabbitMQ

3.1.pom.xml添加rabbitmq依赖

 <dependency>        <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> 

3.2.rabbitmq连接配置

server.port=8080
     spring.rabbitmq.host=192.168.199.144
     spring.rabbitmq.port=5672
     spring.rabbitmq.username=springboot
     spring.rabbitmq.password=123456
      ## 与启动容器时虚拟主机名字一致~~~与启动容器时虚拟主机名字一致~~~与启动容器时虚拟主机名字一致~~~
     spring.rabbitmq.virtual-host=my_vhost

3.3.创建Rabbit配置类RabbitConfig

 //配置类主要用来配置队列、交换器、路由等高级信息
     @Configuration 
     public class RabbitConfig { 
        
       @Bean
       public Queue firstQueue() { 
        
         // 创建一个队列,名称为:first
         return new Queue("first");
       }
     }

@Configuratio:该注解表式该类是一个配置类
@Bean:表式将这个方法放到spring的上下文中

3.4.创建消息产生者类

@Component
     public class Sender { 
        
       @Autowired
       private AmqpTemplate rabbitTemplate;

       public void send() { 
        
         rabbitTemplate.convertAndSend("first", "test rabbitmq message !!!");
       }
     }

@Component :该类是个组件类,会在项目启动时自动启动
@Autowired:注入

3.5.创建消息消费者

@Component
     @RabbitListener(queues = "first")
     public class Receiver { 
        
         @RabbitHandler
         public void process(String msg) { 
        
             System.out.println("receive msg : " + msg);
         }
     }

@RabbitListener注解:定义该类需要监听的队列
@RabbitHandler注解:指定对消息的处理

3.6.启动主程序

控制台如果出现以下信息,则说明rabbitmq连接成功
Creatednewconnection:rabbitConnectionFactory#5adb0db3:0/SimpleConnection@183e8023 [delegate=amqp://springboot@192.168.199.144:5672/my_vhost, localPort= 53066]

3.7.测试

在springboot自带的测试类中进行测试

    @Autowired
     private Sender sender;

    @Test
    void contextLoads() { 
         
         sender.send();
    }

控制台输出:receive msg : test rabbitmq message !!! 集成Rabbit MQ完毕!


总结

本文仅仅简单介绍了RabbitMQ的使用

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章