RabbitMQ - 安装和使用

news2024/12/28 6:04:25

RabbitMQ - 安装和使用

  • 一. 安装
  • 二. RabbitMQ的简单使用
    • 2.1 创建交换机
      • 2.1.1 交换机类型
      • 2.1.2 持久化方式
    • 2.2 创建队列
    • 2.3 绑定交换机和队列
    • 2.4 SpringBoot整合
    • 2.5 另外一种监听写法

一. 安装

一键安装:

docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672  -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:management

相关端口讲解:

  • 4396:EPMD与节点间相互通信的端口。
  • 5671,5672:AMQP协议的端口,基于此进行消息传递。
  • 15671,15672:15672端口,用于访问RabbitMQWeb管理界面。
  • 25672:用于节点间和CLI工具通信的端口。

运行之后,效果如下:找不到之后它会自动去拉镜像并且运行。
在这里插入图片描述

再通过docker ps查看容器的运行情况:
在这里插入图片描述
运行完毕之后,访问http://IP:15672就能访问Web控制页面,默认的账号密码都是:guest
在这里插入图片描述
登录后界面如下:
在这里插入图片描述

二. RabbitMQ的简单使用

先来说下RabbitMQ发送一条消息的一个大致流程:

  1. 生产者将消息发送到一个指定的交换机。并且可以指定一个路由routing key
  2. 一个交换机可以有多个队列进行绑定。交换机根据routing key,决定将消息发送到哪一个队列上。
  3. 消费者监听某个队列,如果队列中有消息,则开始消费。

2.1 创建交换机

从上面我们可以得知,RabbitMQ消息传递的时候,并不是直接将信息发送到队列中,而是发送给交换机。交换机相当于一个交通枢纽,决定了将接收到的消息发送到哪个队列中。

控制台上创建一个交换机的操作顺序如下:bulletPreProcessor-exchange
在这里插入图片描述
其中,有几个属性做一个基本介绍:

2.1.1 交换机类型

Type:交换机的类型,有四种。
在这里插入图片描述
第一种:直连交换机Direct exchange
在这里插入图片描述
特点:

  • 一个队列和交换机绑定的同时,还会绑定一个routing_key
  • 生产者发送消息给交换机的同时,指定一个路由key,交换机就会将消息发送给指定的routing_key

第二种:扇形交换机Fanout exchange
在这里插入图片描述

特点:

  • 将接收到的消息发送给绑定到自己身上的所有队列。
  • 无需处理路由,因此处理消息的速度最快。

第三种:主题交换机:Topic exchange。相当于直连交换机的一种升华模式。直连交换机里面一般是指定一个唯一的routing_key。而主题交换机则可以选取带有一定匹配规则的routing_key

例如,主题交换机绑定了以下Key*.#.*.....。其中

  • #:表示任意数量的单词。
  • *:表示一个单词。
  • .:每个部分的一个分割点。

那么满足对应的条件的routing_key,都会接收对应的消息。例如一个消息的routing_keyfast.rabbit.white,那么包含这几个单词的队列都会接收到这条消息:

  • fast、white、rabbit

第四种:首部交换机:Headers exchange。特点:

  • 不再使用routing_key作为路由键。而是使用Headers信息来进行交换。类似于HTTP请求头。
  • 绑定交换机和队列的时候,要求Hash结构携带一个名为x-match的键。
  • value可以是any(任意匹配一个)或者all(全部匹配)。

2.1.2 持久化方式

在这里插入图片描述

持久化方式有两种:

  • Durable:持久化到磁盘。
  • Transient:不持久化。

2.2 创建队列

创建一个名为originBullet-queue的队列:
在这里插入图片描述

2.3 绑定交换机和队列

点击我们刚创建的交换机:
在这里插入图片描述

然后点击Bindings,添加一个绑定关系。指定我们的routing_keybullet.originMessage .
在这里插入图片描述

结果如下:
在这里插入图片描述

2.4 SpringBoot整合

1.pom依赖:

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

2.RabbitMQ相关配置:

spring:
  application:
    name: tv-service-bulletCurtain
  rabbitmq:
    username: guest
    password: guest
    # 虚拟主机,默认是/
    virtual-host: /
    # 超时时间
    connection-timeout: 30000
    listener:
      simple:
        # 消费模式,手动
        acknowledge-mode: manual
        # 并发数
        concurrency: 1
        # 最大并发数
        max-concurrency: 1
        # 限流
        prefetch: 1
    addresses: 你的IP地址:5672

3.RabbitMQ配置类:

@Configuration
public class RabbitMQConfig {
    @Bean
    public Queue TestDirectQueue() {
        return new Queue("originBullet-queue", true);
    }

    @Bean
    DirectExchange TestDirectExchange() {
        return new DirectExchange("bulletPreProcessor-exchange", true, false);
    }

    @Bean
    Binding bindingDirect() {
        return BindingBuilder.bind(TestDirectQueue()).to(TestDirectExchange()).with("bullet.originMessage");
    }
}

4.生产者OriginMessageSender:(SendMessageEntity是我外部传入的对象,Demo可以自己随便传)

@Component
public class OriginMessageSender {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void send(SendMessageEntity sendMessageEntity) {
        CorrelationData correlationData = new CorrelationData();
        correlationData.setId(UUID.randomUUID().toString());// 唯一ID
        Map<String, Object> map = new HashMap<>();
        map.put("message", JSONObject.toJSONString(sendMessageEntity));
        rabbitTemplate.convertAndSend("bulletPreProcessor-exchange",// 交换机名称
                "bullet.originMessage",// 路由Key
                map, correlationData);
    }
}

5.消费者OriginMessageReceiver

import com.alibaba.fastjson.JSONObject;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.handler.annotation.Headers;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.Map;

/**
 * @author Zong0915
 * @date 2022/12/9 下午8:35
 */
@Component
@Slf4j
public class OriginMessageReceiver {
    @RabbitListener(queues = "originBullet-queue")
    @RabbitHandler
    public void onOriginMessage(@Payload Map testMessage, @Headers Map<String, Object> headers, Channel channel) throws IOException {
        log.info("***********消费开始*************");
        log.info("消费体:{}", JSONObject.toJSONString(testMessage));
        Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);
        channel.basicAck(deliveryTag, false);
    }
}

测试如下:(我这里整合了WebSocket,发送弹幕的时候顺便发了个Q)
在这里插入图片描述
生产者发送消息给交换机:
在这里插入图片描述
消费者消费:
在这里插入图片描述
到这里一个简单的生产消费过程就结束了。

2.5 另外一种监听写法

如果不使用RabbitMQConfig来配置,我们可以在监听的时候指定对应的交换机和队列以及路由,消费者写法如下:

@RabbitListener(
        bindings = @QueueBinding(
                value = @Queue(value = "originBullet-queue", durable = "true"),
                exchange = @Exchange(name = "bulletPreProcessor-exchange", type = "direct"),
                key = "bullet.originMessage"
        )
)
@RabbitHandler
public void onOriginMessage(@Payload Map testMessage, @Headers Map<String, Object> headers, Channel channel) throws IOException {
    log.info("***********消费开始*************");
    log.info("消费体:{}", JSONObject.toJSONString(testMessage));
    Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);
    channel.basicAck(deliveryTag, false);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/78024.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rtl8221b+mcu,2.5g光纤收发器的开发备份

1、rtl8221b是一款2.5g的光电转换的phy 系统的构建如下 为了省成本&#xff0c;不用mac来对接其中的gmii接口直接接光模块 2、mdio和mdc由mcu的gpio来模拟&#xff0c;在csdn上有很多的文章来参考 mdio的参数如下 不想看英文可以参考下面的文章 MDIO(clause 22 与 clause 4…

Java基础之《netty(10)—Reactor三种模式》

一、单Reactor单线程模式 1、工作原理图 2、方案说明 &#xff08;1&#xff09;Select是前面I/O复用模型介绍的标准网络编程API&#xff0c;可以实现应用程序通过一个阻塞对象监听多路连接请求。 &#xff08;2&#xff09;Reactor对象通过Select监控客户端请求事件&#xf…

一元钱注册 chatGPT账号

文章目录打开 openai chatgpt 主页注册 chatGPT 账号找境外的电话号码激活账号查看服务价格账号注册充值成功参考视频 打开 openai chatgpt 主页 打开之前首先登录 vpn。但是使用 vpn 有可能还是会被告知 当前国家没有开放服务个人建议&#xff1a; 使用美国的 ip 地址我使用…

PIN TO PIN替代GM8775C|DSI转LVDS转换方案芯片CS5518|CS5518完全替代GM8775C

GM8775C 型 DSI 转双通道 LVDS 发送器产品主要实现将 MIPI DSI 转单/双通道 LVDS 功能&#xff0c;MIPI 支持 1/2/3/4 通道可选&#xff0c;最大支持 4Gbps 速率。LVDS 时钟频率最高 154MHz&#xff0c; 最大支持视频格式为 FULL HD&#xff08;1920 x 1200&#xff09; CS551…

网络安全观察报告

攻击类型分析 2018 年&#xff0c;主要的攻击类型 1 为 SYN Flood&#xff0c;UDP Flood&#xff0c;ACK Flood&#xff0c;HTTP Flood&#xff0c;HTTPS Flood&#xff0c; 这五大类攻击占了总攻击次数的 96&#xff05;&#xff0c;反射类攻击不足 3%。和 2017 年相比&…

测评报告:文件导入哪家强?

文件导入哪家强&#xff1f; 引子 最近业务上遇到一个场景&#xff0c;需要将一个/多个文本文件导入到与其结构对应的表中。功能需求比较简单&#xff0c;大部分的关系数据库基本都支持这个功能。基于上面的场景把手头上的几款开源数据库和国产数据库的文件导入功能进行了性能对…

【通信基础】TTL、RS232、RS485

TTL1、TTL简介RS2321、RS232基本概念2、DB9串口定义及接线参考3、RS232经典电路4、特点RS4851、RS485简介2、特点3、传输距离4、经典电路5、传输差分电平信号TTL 1、TTL简介 TTL的英文全称是Transisor-Transisor Logic. 翻译过来就是晶体管与晶体管之间的逻辑电路。 TTL电平信…

78.【大二实训--《宿舍管理系统》】

大二实训--《宿舍管理系统》1.在JSP中&#xff0c;如果想要获取后端传过来的数据2.在Dao层我们用数据库的属性给实体类赋值的时候3.在一个Servlet中&#xff0c;如果想要使用多个Service4.字符串yyyy-mm-dd格式转换为Date型5.在设置实体类的时候&#xff0c;属性名开头一定要小…

IDEA创建JavaWeb项目并配置Tomcat

本文教给各位使用IDEA创建web项目&#xff0c;配置tomcat进行访问&#xff0c;好了&#xff0c;下面进入正题 IDEA分为社区版和企业版&#xff0c;区别在于&#xff0c;社区版免费&#xff0c;企业版收费&#xff0c;但有30天免费使用期&#xff0c;到期后会提示你进行激活&am…

MySQL 单表查询

1.简单查询 1.1 SELECT语句 SELECT [DISTINCT] * |字段名1&#xff0c;字段名2&#xff0c;... FROM 表名 [WHERE 条件表达式1] [GROUP BY 字段名 [HAVING 条件表达式2]] [GROUP BY 字段名 [ASC | DESC]] [LIMIT [OFFSET] 记录数]1.2 查询指定字段 SELECT 字段1,字段2,... F…

【深入理解 —— js闭包】

&#x1f9c1;个人主页&#xff1a;个人主页 ✌支持我 &#xff1a;点赞&#x1f44d;收藏&#x1f33c;关注&#x1f9e1; 文章目录js闭包&#x1f380; 什么是闭包&#xff1f;&#x1fa70; 执行上下文&#xff08;执行环境&#xff09;&#x1f367;解释闭包的含义&#x…

Linux 黑马

1.1虚拟机介绍1.2VMware Workstation虚拟化软件 下载CentOS; 5分钟教你下载安装VMware16虚拟机&#xff08;含许可证密钥&#xff09;【全免费VMware虚拟机 上集】_哔哩哔哩_bilibili 1.3远程链接Linux系统 &FinalShell 1.4拓展WSL(Ubuntu)环境 Win11>可选功能>…

愿你被这个世界温柔以待(第二十课)最优秀的仓库Gitee

愿你被这个世界温柔以待(第二十课)最优秀的仓库Gitee 在追梦的道路上 相信自己一定能变的更加优秀 看下面操作流程图:如果你觉自己的学习能力很强跟着下面的流程图片去走 图片教学 上传一份项目如何做 下面的是图片教学 看到上面的图片操作可能看不懂 Giteej基本操作命令行 初…

Photoshop简单案例(9)——利用PS去水印的四种方法

目录一、项目介绍二、简单水印2.1 水印原图2.2 去除步骤2.3 去除效果三、文件水印3.1 水印原图3.2 去除步骤3.3 去除效果3.4 拓展四、内容识别法4.1 水印原图4.2 去除步骤4.3 去除效果一、项目介绍 本文将介绍利用PhotoShop去水印的四种方法。 二、简单水印 2.1 水印原图 对…

我敢打赌,90%的测试人员都不理解Git

01 概念 1、Git本地有四个工作区域&#xff1a; 工作目录&#xff08;Working Directory&#xff09; 暂存区&#xff08;Stage/Index&#xff09; 资源库&#xff08;Repository或Git Directory&#xff09; git仓库&#xff08;Remote Directory&#xff09; 文件在这四…

深度学习设计模式(一):编写高质量代码的基础(多例子+代码)

学习如何编写高质量代码前言面向对象面向对象编程&#xff0c;面向对象编程语言面向对象分析 &#xff0c;面向对象设计封装&#xff0c;抽象&#xff0c;继承&#xff0c;多态封装抽象继承多态面向对象比面向过程有哪些优势&#xff0c;面向过程过时了&#xff1f;什么是面向过…

MyBatisPlus入门

目录 概述 SpringBoot继承MyBatisPlus CRUD 新增 删除 修改 查询 条件构造器 全局配置 相关注解 ActiveRecord 插件 分页插件 防止全表删除插件 乐观锁插件 乐观锁插件的使用 逻辑删除 使用逻辑删除 扩展 自动填充 Sql注入器 代码生成器Generator 代码生成器MyBa…

Seata 分布式事务你懂吗?学习了大咖的笔记,公司说要给我涨薪 8K

分布式事务处理过程的-ID三组件模型&#xff1a; 关于事务的基本概念 Seata 是阿里开源的分布式事务解决方案中间件&#xff0c;对业务侵入小&#xff0c;在应用中 Seata 整体事务逻辑基于两阶段提交的模型&#xff0c;核心概念包含三个角色&#xff1a; TM&#xff1a;事务发…

听说你还在自己做重复劳动?看我一键生成错误码映射

大家在工作中定义错误码的时候都是如何处理的&#xff1f; xdm 可以评论区交流交流 我看到过有的是这样定义错误码的&#xff1a; m : make(map[int]string)m[0] "OK"m[1] "链接失败"m[2] "文件类型错误"... 还看到过这样定义错误码的&#x…

腾讯云2核2G、2核4G、4核8G、8核16G、16核32G服务器价格出炉

腾讯云轻量应用服务器为轻量级的云服务器&#xff0c;使用门槛低&#xff0c;按套餐形式购买&#xff0c;轻量应用服务器套餐自带的公网带宽较大&#xff0c;4M、6M、7M、10M、14M及20M套餐可选&#xff0c;如果是云服务器CVM这个带宽价格就要贵很多了。 轻量应用服务器CPU内存…