RabbitMQ Linux安装以及IDEA使用

一.在linux上安装插件

1.加载插件

输入命令 yum -y install epel-release

加载插件 yum -y install socat

在这里插入图片描述

2.在/usr/src下创建一个RabbitMQ目录,将MQ下载在这个目录下

在这里插入图片描述

3.安装erlang环境

在/usr/src/RabbitMQ 目录下将MQ需要的两个安装包放进去,进行安装命令,在linux粘贴: insert + shift

yum install -y esl-erlang_22.1.8-1_centos_7_amd64.rpm

4.安装RabbitMQ

yum install -y rabbitmq-server-3.8.1-1.el7.noarch.rpm

5.启动服务

1)启动服务

输入命令,启动服务

service rabbitmq-server start

停止服务

service rabbitmq-server stop

重启服务

service rabbitmq-server restart

2)开启管理插件

rabbitmq-plugins enable rabbitmq_management

在这里插入图片描述

3)修改主机名,将自己的主机名添加到hosts中

vi /etc/hosts

在这里插入图片描述

4).关闭防火墙

只关闭一次

systemctl stop firewalld

永久关闭

systemctl disable firewalld

5).添加用户名

rabbitmqctl add_user 用户名 密码

6).给用户权限,超级管理员

rabbitmqctl set_user_tags 用户名 administrator

在这里插入图片描述

二.MQ的实际应用

在这里插入图片描述

1.简单类型

  1. 加载顺序:

    • 获取到连接
    • 创建通道
    • 声明队列,去哪个队列获取
    • 监听队列,是否有消息
    • 消息发送给哪个队列

重点执行流程

在这里插入图片描述
2. ### 解决方法(手动ack确认):

在这里插入图片描述

3在这里插入图片描述

2.Work模式

在这里插入图片描述

  1. 消费者默认是轮循机制,一人一条

  2. 若让一个消费者在读取消息的时候睡了1秒,那么会造成第二个消费者已经将自己的轮循消息处理完了,第一个消费者还在慢慢的处理自己被分配的消息,工作效率低

在这里插入图片描述

  1. 需要在声明队列后添加一个每个消费者同时只能处理一条消息

  2. 原因:处理完消息后,那个线程还处于睡眠状态

在这里插入图片描述

模式机制

在这里插入图片描述

3.fanout(扇形;广播;交换机)

在这里插入图片描述

不同

  1. 添加了交换机(Exchange),交换机会向所有队列都发送消息

在这里插入图片描述

  1. 消费者类声明队列,队列绑定交换机,消费者监听队列,队列有消息就订阅

在这里插入图片描述

4.Direct(定向发送)

在这里插入图片描述

4.1 发送者 交换机通过广播形式,以暗号对应,哪个队列可以对的上就将哪个消息放到队列中

在这里插入图片描述

4.2 接收者

在这里插入图片描述

接收者2

在这里插入图片描述

问题:

如果我的rabbitMQ突然宕机了,交换机没有持久化,消息就丢失了,队列也没有持久化

解决

1.发送者将交换机,消息持久化

在这里插入图片描述

2.消费者将队列持久化

在这里插入图片描述

5.Topics(消息持久化以及*,#)

在这里插入图片描述

5.1生产者 MessageProperties的静态方法可以保证消息的持久化

在这里插入图片描述

5.2消费者 1.1

图有错: #是匹配所有 *是匹配一级目录

user.# 匹配所有user.下的路径: user.a user.a.a.a 不管几层目录都可以

user.* 只可以匹配user下的一层路径 例如 user.a user.b user.c

#.user 只要是user结尾的都可以

*.user 只能是a.user b.user c.user

在这里插入图片描述

5.3 注意

1.若发送者定义了交换机持久化以及消息持久化

2.那么消费者绑定交换机时也应将持久化开开,否者报异常,客户端连接不上;队列也开启持久化

三.SpringBoot整合RabbitMQ

1.引入依赖

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

2.配置yaml文件

  1. spring:
      rabbitmq:
        host: 192.168.92.128
        username: lzj
        password: lzj
        virtual-host: new #虚拟主机名称
        port: 5672
    

3.发消息

  1. 单元测试类中发送消息

  2.   @Autowired
        private AmqpTemplate amqpTemplate;
    
        @Test
        public void sendMessage(){
            String msg="你好!!!!";
            amqpTemplate.convertAndSend("heima.topic.exchange", "a.insert", msg);
        }
    

4.消费者消费消息

  1. 自定义一个类

    1.这个类只负责监听已有的队列,不负责创建新的队列

    2.接收消息的类型与队列中已有的消息数据类型相对应

在这里插入图片描述

5.修改发送消息的格式为json格式

  1. 不修改,jdk自带

    在这里插入图片描述

5.2源码跟踪

  1. 发送消息的接口进入

在这里插入图片描述

6.Java代码注解方式绑定交换机,队列,routekey

发消息还是测试类发送消息

  1. 在这里插入图片描述

  2. 进源码 在这里插入图片描述

  3. 在这里插入图片描述

  4. 在这里插入图片描述

  5. 在这里插入图片描述

  6. 在这里插入图片描述

  7. 在这里插入图片描述

  8. 在这里插入图片描述

  9. 更换发送消息的序列化格式 在这里插入图片描述

    1. 更换转换格式的原理 在这里插入图片描述

7.Java方式使用Bean注入,绑定交换机,队列,消息

7.1只适用于接收消息,发送消息仍需测试类

7.2测试类启动,会加载整个SpringBoot

  1. 启动类中注入Bean,完成绑定以及创建交换机和队列

在这里插入图片描述

  1. 监听自定义的队列

在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值