rabbitmq的介绍、使用、案例

1.介绍

image-20231227172600459

rabbitmq简单来说就是个消息中间件,可以让不同的应用程序之间进行异步的通信,通过消息传递来实现解耦和分布式处理。

消息队列:允许将消息发到队列,然后进行取出、处理等操作,使得生产者和消费者之间能够解耦,异步地进行通信。

持久性,可靠性的消息传递机制。

2.安装rabbitmq

2.1新建文件夹

[root@localhost local]# mkdir rabbitmq
[root@localhost rabbitmq]# mkdir data

新建一个rabbitmq的文件夹,然后在rabbitmq文件夹下新建一个data的文件夹。data文件夹用来挂载rabbitmq内部文件,然后用来存储数据。

2.2查看rabbitmq的镜像

[root@localhost rabbitmq]# docker search rabbitmq

image-20231229160310145

然后就可以下载官方的rabbitmq了。

2.3下载rabbitmq镜像

[root@localhost rabbitmq]# docker pull rabbitmq  下载镜像
[root@localhost rabbitmq]# docker images   查看镜像

image-20231229160750825

下载好之后就可以查看下镜像,这样最新的rabbitmq就已经下载成功了,下一步就是创建容器了。

2.4创建rabbitmq容器

docker run -it \
--name rabbitmq \
--network wn_docker_net \
--ip 172.18.12.20 \
-v /etc/localtime:/etc/localtime \
-v /usr/local/software/rabbitmq/data:/var/lib/rabbitmq \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=123 \
-p 15672:15672 \
-p 5672:5672 \
-d rabbitmq

--network,--ip自己设置的网络ip。可以查看下自己的ip是多少。

[root@localhost rabbitmq]# docker inspect rabbitmq

image-20231229163007595

这就是我们之前设置的ip地址了。

-v是挂载容器内部的文件,这样方便我们在Linux上就可以直接对文件进行操作,在容器内部,先当与一个简单的Linux,里面有一些指令是没有的,需要下载,不方便我们进行操作。-v冒号前面的是自己的路径,注意看自己的路径名称和路径是否正确,避免创建时出错。在创建的时候可以先复制到记事本上,对比自己的信息,进行更改,在Linux上不便操作。

-e是用来设置rabbitmq的默认的账号和密码。

[root@localhost rabbitmq]# docker ps

image-20231229162220698

是up的话就是创建成功了。这里也可以查看日志检查是否成功。

[root@localhost rabbitmq]# docker logs rabbitmq

image-20231229163219631

image-20231229163240292

看到版本号,这些info就是ok了,遇到错误的时候,多看看日志,帮助自己解决问题。

3.查看官网

image-20231229163520482

输入自己的虚拟机ip+刚刚设置的端口号,进到这个页面,然后输入之前设置好的默认的账号和密码。

3.1访问失败解决办法

image-20231229163639291

如果是这个页面的话,多半和防火墙有关,没有开放端口。这里的话我是自己电脑学习和测试用的,直接把防火墙关了,如果你不放心的话,就每次安装一个新的东西的时候,记得开放下端口。

[root@localhost rabbitmq]# firewall-cmd --add-port=15672/tcp --permanent

这样就是把15672这个端口给永久开放了,顺便把5672也给打开,后面用java代码的时候有用。

firewall-cmd --reload

可以检查有没有打开。如果还是访问不了,那么就有可能是rabbitmq有个插件没有开,不让我们用浏览器打开。

进到rabbitmq容器的内部。

[root@localhost rabbitmq]# docker exec -it rabbitmq bash
root@439d8554a76d:/# rabbitmq-plugins enable rabbitmq_management

运行命令,打开管理端,然后exit可以退出容器,刷新下页面看下能不能成功,如果还是不行,查看日志。

image-20231229165524041

这样就成功的进到了rabbitmq的操作页面了。

4.生产者和消费者模型

4.1介绍

rabbitmq的基础理论就是生产者和消费者模型,在这里进行解释,方便对rabbitmq进行理解和使用。

生产者和消费者模型是分为以下几个要素:共享缓冲区、生产者、消费者。下面以去kfc买鸡腿举例:

image-20240109161745851

就是顾客要买鸡腿,肯定是需要去店里去买的,只有店员在炸好鸡腿之后,顾客点餐买好鸡腿。炸鸡腿的店员和顾客是不直接接触的,是互相不认识的。

在rabbitmq的消费者和生产者模型中通常就是消费者将消息发送到消息队列中,消费者从消息队列中获取消息并处理。实现解耦和异步通信。

4.1.1队列的解释

首先队列是一种数据结构,它的底层可能是数组也可以是链表两种。在这里先解释数组和链表的区别:

数组:连续的内存空间,查询比较高效,数组需要指定大小,超过范围要考虑扩容的问题。

链表:非连续的内存空间,对在链表中进行插入和删除很高效,动态大小。

4.2代码举例

以去KFC买鸡腿为例:

4.2.1entity 实体类
package com.mq.entity;
​
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
​
/*
kfc中的产品名称
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Food {private String name;
}

就是简单的写个名字。

lombok可以简化代码,提高代码的可读性和可维护性。在pom文件中引入。

    <dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency></dependencies>

@Data 通用方法,set、get、tostring等

@AllArgsConstructor 全参

@NoArgsConstructor 无参

4.2.2service

接口:

/*** produce:生产者* consume:消费者*/
public interface IKFC {
​public void produce();
​public void consume();
}

在IKFC这个接口中,写了一个生产者的抽象方法和一个消费者的抽象方法来模拟实际的场景。

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

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

相关文章

scratch打蝙蝠 2023年12月中国电子学会 图形化编程 scratch编程等级考试二级真题和答案解析

目录 scratch打蝙蝠 一、题目要求 1、准备工作 2、功能实现 二、案例分析

基于SpringBoot Vue博物馆管理系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

Qt拖拽组件与键盘事件

1.相关说明 1.设置widget或view的拖拽和放置模式函数setDragDropMode参数说明&#xff0c;NoDragDrop(无拖拽和放置)、DragOnly(只允许拖拽)、DropOnly(只允许放置)、DragDrop(允许拖拽和放置)、InternalMove(只移动不复制) 2.设置widget或view的放置动作函数setDefaultDropAct…

MacOS X 安装免费的 LaTex 环境

最近把工作终端一步步迁移到Mac上来了&#xff0c;搭了个 Latex的环境&#xff0c;跟windows上一样好用。 选择了 Mactex 做编译&#xff0c;用 Texmaker 做编辑&#xff1b; 1. 下载与安装 1.1 Mactex 下载安装 MacOS 安装和示例 LaTex 的编译器 与 编辑器 编译器使用免费…

Cocos在VsCode中调试-端口安全问题 net::ERR_UNSAFE_PORT

问题: POST http://127.0.0.1:6000/api/login net::ERR_UNSAFE_PORT 原因&#xff1a; 这个错误表明你在尝试使用一个被认为是不安全的端口进行网络请求。通常情况下&#xff0c;浏览器会限制使用一些特定的端口&#xff0c;因为它们被认为是潜在的安全风险。 在这种情况下&a…

IO、NIO、IO多路复用

IO是什么&#xff1f; IO分为两类&#xff0c;它们之间是有区别的&#xff0c;而且有很大的区别&#xff1b;1. 文件系统的IO 也叫本地io&#xff0c;就是和磁盘或者外围存储设备进行读写操作&#xff0c;外围设备有USB、移动硬盘等等&#xff1b;2. 网络的IO 将数据发送给对方…

Jetson Orin Nano使用OpenCV获取视频帧率和帧数的方法

测试过程 首先确认下视频的播放时间 使用cv库来获取帧率和帧数&#xff0c;测试代码如下 import cv2 cap cv2.VideoCapture("xxx.mp4") if not cap.isOpened():print("Cannot open camera")exit()# get default video FPS fps cap.get(cv2.CAP_PROP_F…

Peter算法小课堂—拓扑排序与最小生成树

拓扑排序 讲拓扑排序前&#xff0c;我们要先了解什么是DAG树。所谓DAG树&#xff0c;就是指“有向无环图”。请判断下列图是否是DAG图 第一幅图&#xff0c;它不是DAG图&#xff0c;因为它形成了一个环。第二幅图&#xff0c;它也不是DAG图&#xff0c;因为它没有方向。第三幅…

手把手教你如何快速定位bug,如何编写测试用例,快来观摩......

手把手教你如何快速定位bug,如何编写测试用例,快来观摩......手把手教你如何快速定位bug,如何编写测试用例,快来观摩......作为一名测试人员如果连常见的系统问题都不知道如何分析&#xff0c;频繁将前端人员问题指派给后端人员&#xff0c;后端人员问题指派给前端人员&#xf…

pytest log配置

发现用print在console里面打不出来&#xff0c;所以查了一下关于pytest的log配置&#xff0c;记录 首先需要在根目录新建 pytest.ini 如果你只需要使用print打印日志的话&#xff0c;就只需要这样写 [pytest] addopts -s #addopts 是一个配置项&#xff0c;用于指定传递给 p…

hdu 3709 Balanced Number

Balanced Number 题意 定义一个非负整数在第 p p p 位为 p i v o t pivot pivot 的权重为&#xff1a;这个数位的值 \times 这个数位到 p i v o t pivot pivot 的距离 之和。如果在 p i v o t pivot pivot 左边的权重等于在 p i v o t pivot pivot 右边的权重&#xf…

CSS中隐藏页面元素的几种方式和区别

前言、 在平常的样式排版中&#xff0c;我们经常遇到将某个模块隐藏的场景&#xff0c;通过css隐藏的元素方法有很多种&#xff0c;它们看起来实现的效果是一致的&#xff0c;但实际上每一种方法都有一丝轻微的不同&#xff0c;这些不同决定了在一些特定场合下使用哪一种方法。…

什么是小红书报备达人,报备流程总结!

随着KOL的崛起&#xff0c;品牌方投放达人是司空见惯的事情。所以&#xff0c;关于品牌投放小红书达人时&#xff0c;一定要知道什么是报备。今天来马文化传媒和大家分享下什么是小红书报备达人&#xff0c;报备流程总结&#xff01; 一、什么是小红书报备 小红书报备即是&…

OpenHarmonyOS-gn与Ninja

GN语法及在鸿蒙的使用 [gnninja学习 0x01]gn和ninja是什么 ohos_sdk/doc/subsys-build-gn-coding-style-and-best-practice.md GN 语言与操作 一、gn简介 gn是generate ninja的缩写&#xff0c;它是一个元编译系统&#xff08;meta-build system&#xff09;,是ninja的前端&am…

【Qt】对象树与坐标系

需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云<--/-->阿里云<--/-->华为云<--/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;新用户首次下单享超低折扣。 目录 一、Qt Creator快捷键 二、对象树 1、对象树的析构 2、自定义类的编写…

【原文链接】Tri-Perspective View for Vision-Based 3D Semantic Occupancy Prediction

原文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2023/papers/Huang_Tri-Perspective_View_for_Vision-Based_3D_Semantic_Occupancy_Prediction_CVPR_2023_paper.pdf 1. 引言 体素表达需要较大的计算量和特别的技巧&#xff08;如稀疏卷积&#xff09;&…

python开发之远程开发工具对比

前言 除了本地开发外&#xff0c;还有一种常见的开发方式就是远程开发&#xff0c;一般情况是一台Windows或mac笔记本作为日常使用的电脑&#xff0c;另有一台linux服务器作为开发服务器。开发服务器的性能往往较强&#xff0c;这样远程开发的方式一方面可以让我们在习惯的系统…

组件(Component):可重用的元素

目标效果&#xff1a;点击粉色按钮后&#xff0c;出现一行“为什么非要点我&#xff1f;”的文字。 用组件的方式实现&#xff1a;首先单击项目文件夹01&#xff0c;然后右键弹窗中点击“添加新文件” 。 选择 QML File 文件&#xff1a; 文件名就叫Button&#xff0c;然后把代…

QoS简介

QoS产生的背景 网络的普及和业务的多样化使得互联网流量激增&#xff0c;从而产生网络拥塞&#xff0c;增加转发时延&#xff0c;严重时还会产生丢包&#xff0c;导致业务质量下降甚至不可用。所以&#xff0c;要在网络上开展这些实时性业务&#xff0c;就必须解决网络拥塞问题…

Three.js 学习笔记之模型(学习中1.20更新) | 组 - 模型 - 几何体 - 材质

文章目录 模型 几何体 材质层级模型组- THREE.Group递归遍历模型树结构object3D.traverse() 模型点模型Points - 用于显示点线模型Line | LineLoop | LineSegments网格模型mesh - 三角形网格模型独有的属性与方法 几何体BufferGeometry缓冲类型几何体BufferGeometry - 基类创…