centos8安装RabbitMQ和erlang

news2025/1/13 7:34:59

RabbitMQ

消息队列MQ

RabbitMQ简称MQ是一套实现了高级消息队列协议的开源消息代理软件,简单来说就是一个消息中间件。是一种程序对程序的通信方法,其服务器也是以高性能、健壮以及可伸缩性出名的Erlang语言编写而成

为什么使用MQ

在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量,简单来说RabbitMQ就是一个消息队列中间件,用来保存消息和传递消息的一个容器。在此过程中充当一个中间人的作用

而队列的主要目的就是提供正确的路由来保证消息的传递;如果发送消息时消费者不可用的话,默认情况下该消息将会一直被存储在队列中,直到消费者消费为止

那么同时呢,如果设置了消息存活的时间,即消息的有效期。在此有效期间消息如果还没有被消费的话,那么该消息就会变成死信,由死信交换机接收。而绑定死信交换机的队列则称为死信队列

开发中消息队列通常有如下应用场景:

任务异步处理 将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理,提高了应用程序的响应时间
应用程序解耦合 MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合

常见作用:

1 耗时操作 
2.解耦合 
3.限流(削峰填谷)

常见的应用常见有:用户订单,库存处理;用户注册,发送手机短信邮件;商品秒杀和抢购等…

举个栗子:用户订单,库存处理。【服务间解耦】

使用MQ前:系统正常时,用户下单,订单系统调用库存系统进行删减操作,操作成功,将成返回消息,提醒下单成功。系统异常时,库存系统将无法访问,导致订单删减操作无法执行,最终导致下单失败。
在这里插入图片描述

使用MQ后:订单系统和库存系统之间不在互相影响,独立运行,达到了应用解耦的目的。订单系统只需要将下单消息写入MQ,就可以直接执行下一步操作。这时即使库存系统出现异常也不会影响订单系统的操作,且下单的库存删减记录,将会被永久保存到MQ中,直到库存系统恢复正常,从MQ中订阅下单消息,进行消费成功为止。

在这里插入图片描述

实现MQ的大致有两种主流方式:

AMQP、JMS
  • AMQP:AMQP高级消息队列协议,是一个进程间传递异步消息的网络协议,更准确的说是一种binary wire-level protocol(链接协议)。这是其和JMS的本质差别,AMQP不从API层进行限定,而是直接定义网络交换的数据格式

  • JMS:JMS即Java消息服务(JavaMessage Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信

AMQP 与 JMS 区别

  • JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据交互的格式

  • JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的

  • JMS规定了两种消息模式;而AMQP的消息模式更加丰富

  • JMS ①订阅模式 ②点对点消息模式

消息队列产品

目前市面上成熟主流的MQ有Kafka 、RocketMQ、RabbitMQ,这里我主要介绍RabbitMQ,其他的简单介绍一下

Kafka

Apache下的一个子项目,使用scala实现的一个高性能分布式Publish/Subscribe消息队列系统
  • 快速持久化:通过磁盘顺序读写与零拷贝机制,可以在O(1)的系统开销下进行消息持久化
  • 高吞吐:在一台普通的服务器上既可以达到10W/s的吞吐速率
  • 高堆积:支持topic下消费者较长时间离线,消息堆积量大
  • 完全的分布式系统:Broker、Producer、Consumer都原生自动支持分布式,依赖zookeeper自动实现复杂均衡
  • 支持Hadoop数据并行加载:对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案

RocketMQ

(RocketMQ的前身是Metaq,当Metaq3.0发布时,产品名称改为RocketMQ)RocketMQ是一款分布式、队列模型的消息中间件
  • 能够保证严格的消息顺序
  • 提供丰富的消息拉取模式
  • 高效的订阅者水平扩展能力
  • 实时的消息订阅机制
  • 支持事务消息
  • 亿级消息堆积能力

RabbitMQ

  • 可靠性(Reliablity):使用了一些机制来保证可靠性,比如持久化、传输确认、发布确认。
  • 灵活的路由(Flexible Routing):在消息进入队列之前,通过Exchange来路由消息。对于典型的路由功能,Rabbit已经提供了一些内置的Exchange来实现。针对更复杂的路由功能,可以将多个Exchange绑定在一起,也通过插件机制实现自己的Exchange。
  • 消息集群(Clustering):多个RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker。
  • 高可用(Highly Avaliable Queues):队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用。
  • 多种协议(Multi-protocol):支持多种消息队列协议,如STOMP、MQTT等。
  • 多种语言客户端(Many Clients):几乎支持所有常用语言,比如Java、.NET、Ruby等。
  • 管理界面(Management UI):提供了易用的用户界面,使得用户可以监控和管理消息Broker的许多方面。
  • 跟踪机制(Tracing):如果消息异常,RabbitMQ提供了消息的跟踪机制,使用者可以找出发生了什么。
  • 插件机制(Plugin System):提供了许多插件,来从多方面进行扩展,也可以编辑自己的插件

安装RabbitMQ和erlang

环境:CentOS 8.0 64位
注意事项:每个RabbitMQ对应的erlang是有限制的,而且在centos8的环境下使用yum安装的话需要更新一下yum

环境配置

下载Centos-8.repo

# wget
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo

# curl
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo

生成缓存

yum makecache

安装erlang

由于 rabbitmq 是基于 erlang 语言开发的,所以必须先安装 erlang

安装依赖

yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget gtk2-devel binutils-devel

下载

下载安装包(我是直接在官网下载好了拉到服务器去的)
erlang官网下载地址

[root@ims-jr-ap01-0001 ~]# cd /opt/
[root@ims-jr-ap01-0001 opt]# ls
[root@ims-jr-ap01-0001 opt]# mkdir rabbitmq
[root@ims-jr-ap01-0001 opt]# ls
rabbitmq
[root@ims-jr-ap01-0001 opt]# cd rabbitmq/
[root@ims-jr-ap01-0001 rabbitmq]# ls
otp_src_25.1.2.tar.gz

解压

[root@ims-jr-ap01-0001 rabbitmq]# tar -zxvf otp_src_25.1.2.tar.gz 

在这里插入图片描述
最后为这样是成功

修改路径

[root@ims-jr-ap01-0001 rabbitmq]# mkdir /usr/local/soft
[root@ims-jr-ap01-0001 rabbitmq]# mv otp_src_25.1.2 /usr/local/soft/

切换目录

[root@ims-jr-ap01-0001 rabbitmq]# cd /usr/local/soft/otp_src_25.1.2/

创建安装的存放目录

[root@ims-jr-ap01-0001 otp_src_25.1.2]# mkdir ../erlang

配置安装路径

[root@ims-jr-ap01-0001 otp_src_25.1.2]# ./configure --prefix=/usr/local/soft/erlang

最后为这样是成功
最后为这样是成功

安装

[root@ims-jr-ap01-0001 otp_src_25.1.2]# make install

在这里插入图片描述
查看一下是否安装成功

[root@ims-jr-ap01-0001 otp_src_25.1.2]# ll /usr/local/soft/erlang/bin
total 0
	lrwxrwxrwx 1 root root 24 Jan  7 09:28 ct_run -> ../lib/erlang/bin/ct_run
	lrwxrwxrwx 1 root root 26 Jan  7 09:28 dialyzer -> ../lib/erlang/bin/dialyzer
	lrwxrwxrwx 1 root root 22 Jan  7 09:28 epmd -> ../lib/erlang/bin/epmd
	lrwxrwxrwx 1 root root 21 Jan  7 09:28 erl -> ../lib/erlang/bin/erl
	lrwxrwxrwx 1 root root 22 Jan  7 09:28 erlc -> ../lib/erlang/bin/erlc
	lrwxrwxrwx 1 root root 25 Jan  7 09:28 escript -> ../lib/erlang/bin/escript
	lrwxrwxrwx 1 root root 25 Jan  7 09:28 run_erl -> ../lib/erlang/bin/run_erl
	lrwxrwxrwx 1 root root 24 Jan  7 09:28 to_erl -> ../lib/erlang/bin/to_erl
	lrwxrwxrwx 1 root root 23 Jan  7 09:28 typer -> ../lib/erlang/bin/typer

添加环境变量

[root@ims-jr-ap01-0001 otp_src_25.1.2]# echo 'export PATH=$PATH:/usr/local/soft/erlang/bin' >> /etc/profile

刷新环境变量

[root@ims-jr-ap01-0001 otp_src_25.1.2]# source /etc/profile

进去查看下

命令:halt(). 退出(后面的.别忘记加了)

[root@ims-jr-ap01-0001 otp_src_25.1.2]# erl
Erlang/OTP 25 [erts-13.1.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]

Eshell V13.1.2  (abort with ^G)
1> halt().
[root@ims-jr-ap01-0001 otp_src_25.1.2]#  
(以上为erlang 的安装)

安装RabbitMQ

需要查看 erlang 支持的 rabbitmq 版本号

版本号对照地址

下载及解压
RabbitMQ官方下载地址

我还是一样因为有下载包直接移进去的

[root@ims-jr-ap01-0001 otp_src_25.1.2]# cd /opt/rabbitmq/
[root@ims-jr-ap01-0001 rabbitmq]# ls
otp_src_25.1.2.tar.gz  rabbitmq-server-generic-unix-3.11.6.tar.xz

解压(过程得解压两次)

[root@ims-jr-ap01-0001 rabbitmq]# xz -d rabbitmq-server-generic-unix-3.11.6.tar.xz 
[root@ims-jr-ap01-0001 rabbitmq]# tar -xvf rabbitmq-server-generic-unix-3.11.6.tar 

修改路径,切换目录

[root@ims-jr-ap01-0001 rabbitmq]# mv rabbitmq_server-3.11.6/ /usr/local/soft/
[root@ims-jr-ap01-0001 rabbitmq]# cd /usr/local/soft/

配置环境变量及刷新

[root@ims-jr-ap01-0001 soft]# echo 'export PATH=$PATH:/usr/local/soft/rabbitmq_server-3.11.6/sbin' >> /etc/profile                            
[root@ims-jr-ap01-0001 soft]# source /etc/profile

进入 sbin 目录

[root@ims-jr-ap01-0001 soft]# cd rabbitmq_server-3.11.6/sbin/

启动命令

[root@ims-jr-ap01-0001 sbin]# rabbitmq-server -detached

查看状态

[root@ims-jr-ap01-0001 sbin]# rabbitmqctl status

Status of node rabbit@ims-jr-ap01-0001 ...
Runtime

OS PID: 116387
OS: Linux
Uptime (seconds): 48
Is under maintenance?: false
RabbitMQ version: 3.11.6
RabbitMQ release series support status: supported
Node name: rabbit@ims-jr-ap01-0001
Erlang configuration: Erlang/OTP 25 [erts-13.1.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]
Crypto library: OpenSSL 1.1.1k  FIPS 25 Mar 2021
Erlang processes: 278 used, 1048576 limit
Scheduler run queue: 1
Cluster heartbeat timeout (net_ticktime): 60

停止命令:[root@ims-jr-ap01-0001 sbin]# rabbitmqctl stop

开启web插件

[root@ims-jr-ap01-0001 sbin]# rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@ims-jr-ap01-0001:
rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@ims-jr-ap01-0001...
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

started 3 plugins.

访问一下

[root@ims-jr-ap01-0001 sbin]# curl 10.149.2.95:15672
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>RabbitMQ Management</title>
    <script src="js/ejs-1.0.min.js" type="text/javascript"></script>
   <script src="js/jquery-3.5.1.min.js"></script>
   <script src="js/jquery.flot-0.8.1.min.js" type="text/javascript"></script>
  <script src="js/jquery.flot-0.8.1.time.min.js" type="text/javascript"></script>
   <script src="js/sammy-0.7.6.min.js" type="text/javascript"></script>
    <script src="js/json2-2016.10.28.js" type="text/javascript"></script>
    <script src="js/base64.js" type="text/javascript"></script>
   <script src="js/global.js" type="text/javascript"></script>
   <script src="js/main.js" type="text/javascript"></script>
   <script src="js/prefs.js" type="text/javascript"></script>
   <script src="js/formatters.js" type="text/javascript"></script>
   <script src="js/charts.js" type="text/javascript"></script>
   <script src="js/oidc-oauth/oidc-client-ts.js" type="text/javascript"></script>
   <script src="js/oidc-oauth/helper.js"></script>

   <link href="css/main.css" rel="stylesheet" type="text/css"/>
   <link href="favicon.ico" rel="shortcut icon" type="image/x-icon"/>

  <script type="application/javascript">
   var oauth = oauth_initialize_if_required();

以上安装完成,开始配置用户权限

用户管理

查看所有用户
[root@ims-jr-ap01-0001 sbin]# rabbitmqctl list_users
Listing users ...
user    tags
guest   [administrator]

添加一个用户
[root@ims-jr-ap01-0001 sbin]# rabbitmqctl add_user renfy 123456  
Adding user "renfy" ...
Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.
这个提示是没有给用户权限

配置权限
[root@ims-jr-ap01-0001 sbin]# rabbitmqctl set_permissions -p "/" renfy ".*" ".*" ".*"       
Setting permissions for user "renfy" in vhost "/" ...

查看权限

[root@ims-jr-ap01-0001 sbin]# rabbitmqctl list_user_permissions renfy
Listing permissions for user "renfy" ...
vhost   configure       write   read
/       .*      .*      .*

设置tag

[root@ims-jr-ap01-0001 sbin]# rabbitmqctl set_user_tags renfy root
Setting tags for user "renfy" to [root] ...

[root@ims-jr-ap01-0001 sbin]# rabbitmqctl list_users           
Listing users ...
user    tags
guest   [administrator]
renfy   [root]

安全起见可以删除默认可以删除(我这里没删,但是删除命令写在下面了)

rabbitmqctl delete_user guest 

配置完成重启一下 rabbitMQ 然后就可以用新账号进行登陆

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

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

相关文章

QSyntaxHighlighter

一、描述 此类用于自定义语法高亮显示规则&#xff0c;是用于实现 QTextDocument 文本高亮显示的基类。 要自定义语法高亮显示&#xff0c;必须子类化 QSyntaxHighlighter 并重新实现 highlightBlock()。此函数将在合适的时机自动被调用。 highlightBlock() 函数将格式设置应…

SOFA Weekly|SOFANews、本周贡献 issue 精选

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展欢迎留言互动&#xff5e;SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&#…

Rasa 3.x 学习系列-Rasa [3.4.0] - 2022-12-14新版本发布

Rasa 3.x 学习系列-Rasa [3.4.0] - 2022-12-14新版本发布 任何人都可以学习Rasa之优秀Rasa学习资源推荐 欢迎同学们报名Gavin老师的Rasa系列课程,任何人都可以学习Rasa之优秀Rasa学习资源推荐: 1.NLP on Transformers高手之路137课 2 .Rasa 3.X 智能对话机器人案例开发硬核…

五、k8s pod详解

文章目录1 pod介绍1.1 pod 定义2 pod配置2.1 基本配置2.2 镜像拉取2.3 启动命令2.4 环境变量2.5 端口设置2.6 资源配额3 Pod生命周期3.1 创建和终止3.2 初始化容器3.3 钩子函数3.4 容器探测3.5 重启策略4 Pod调度4.1 定向调度4.2 亲和性调度5 污点和容忍5.1 污点&#xff08;Ta…

做短视频必须了解的6个问题,你知道几个答案呢?

做短视频必须了解的6个问题&#xff0c;你知道几个答案呢&#xff1f; 最近好多朋友问了视频运营和创作的问题&#xff0c;把其中六个有代表性的问题和答案汇总在一起&#xff0c;公开给大家&#xff0c;希望对大家有所帮助。 1、账号被限流了怎么办&#xff1f; 随手拍十条…

聚观早报 | 小米同时研发两款车;谷歌计划向印度最高法院上诉

小米同时研发两款车&#xff1a;谷歌计划向印度最高法院上诉&#xff1b;苹果AR/MR头显部件延迟发货&#xff1b;2022年特斯拉在德汽车销量激增&#xff1b;纽约市教育部门禁止访问 ChatGPT 小米同时研发两款车小米第一款车为中型溜背式轿车&#xff08;内部代号 Modena 摩德纳…

欧科云链任煜男:推动区块链创新,切忌陷入“过度金融化”的桎梏

FTX破产轰动全球&#xff0c;揭示的是监管出现问题。FTX作为行业龙头&#xff0c;持有多国牌照却依然“暴雷”&#xff0c;未来到底应如何监管加密资产行业&#xff1f;针对这一问题&#xff0c;欧科云链控股(01499.HK)公司执行董事、董事局主席兼行政总裁任煜男近日在接受香港…

【菜菜的CV进阶之路 - 深度学习环境搭建】windows+ubuntu20.04双系统安装

新学期&#xff0c;配了台新电脑&#xff08;双路2080ti5800x64GB内存500GB固态2TB机械&#xff09;&#xff0c;师兄忙于毕设&#xff0c;没给装ubuntu&#xff0c;自己装一下咯~ 一、前期准备 1、空U盘一个 2、Ubuntu 20.04 LTS镜像 3、启动U盘制作软件&#xff08;我用的…

STM51嵌入式开发入门软件安装-Keil、stc、驱动

STM51嵌入式开发入门软件安装-Keil、stc、驱动 STM51嵌入式开发入门软件安装-Keil、stc、驱动 1 Keil安装 1.1 百度进入官网 1.2 选择C51,点击后需要填的信息随便填 下载好的软件链接&#xff1a;https://pan.baidu.com/s/19wxkLD69QpmPNr27KYRAxw?pwdyihl 提取码&#xff1a…

【web】微信小程序笔记小结(简介)

准备参加计算机设计大赛owo 疯狂学习微信小程序ing js也在努力兼顾kkk 写完想搞个目录结果老是跳转有问题orz&#xff0c;所以这一篇没有目录了qwq 来源&#xff1a;黑马程序员前端微信小程序开发教程 I. 小程序与普通网页的区别 ① 运行环境 网页 → 浏览器环境 小…

自定义指令binding参数

除了核心功能默认内置的指令 (v-model 和 v-show)&#xff0c;Vue 也允许注册自定义指令。注意&#xff0c;在 Vue2.0 中&#xff0c;代码复用和抽象的主要形式是组件。然而&#xff0c;有的情况下&#xff0c;你仍然需要对普通 DOM 元素进行底层操作 如果想注册局部指令&#…

自定义viewGroup

案例分析&#xff1a;继承自extends LinearLayoutpublic class MainTabBarView extends LinearLayout实现3个方法public MainTabBarView(Context context) {this(context, null);}public MainTabBarView(Context context, Nullable AttributeSet attrs) {this(context, attrs, …

Kettle--MySQL生产数据库千万、亿级数据量迁移方案及性能优化

一、Kettle环境搭建 一、Windows主要用于可视化创建数据迁移用到的ktr转换脚本、kjb作业脚本&#xff0c;以及脚本需要配置的DB2信息、读写性能优化信息等&#xff0c;也可直接在客户端完成不同数据库之间的数据迁移。 测试库表及数据 &#xff08;1&#xff09;创建测试库表…

PVE安装win10并开启远程桌面

接上一篇一、win10安装镜像最新版下载下载地址&#xff1a;https://next.itellyou.cn/现在的win10最新版时22h2,文件名为zh-cn_windows_10_business_editions_version_22h2_updated_dec_2022_x64_dvd_cde06342.iso如果对更新有要求&#xff0c;建议每月跟踪下载一次二、上传win…

IRCNN-FPOCS 代码解读(1):整体框架

0 前言 按照自己实现论文代码的思路&#xff0c;去研究作者的代码&#xff0c;找到自己的知识盲区和不足&#xff0c;提升编码技能。 本模块主要介绍代码实现思路。细节分析详见后续博客。 1、合成地震数据 利用波动方程&#xff1f;&#xff1f;&#xff1f;合成数据&…

JavaScript的“神奇”之处

JavaScript 是一门很棒的语言。它的语法简单&#xff0c;生态系统也很庞大&#xff0c;最重要的是&#xff0c;它拥有最伟大的社区力量。我们知道&#xff0c;JavaScript 是一个非常有趣的语言&#xff0c;但同时也充满了各种奇怪的行为。让我们一起来看一下吧~ example 数组…

Weston 窗口管理(2)

窗口管理(2) 本文基于 weston 分支 10.0.2 进行描述. 五、概述 本文为窗口管理(1)的续章,更多站在开发者角度,以 weston 的代码实现讲解窗口管理(1)中所实现的部分业务场景. 六、数据结构 在窗口管理(1)中曾经描述过 weston 具体的分层逻辑,如下: 再进一步可以把 WESTON_LAY…

关于grpc的第一次尝试

自己瞎琢磨的&#xff0c;有错勿怪。 一、rpc理解 微服务会在不同的端口使用不同的语言提供相异的服务&#xff0c;端口之间的通信就使用rpc。这边的grpc的“g”我原先意味是golang&#xff0c;后来发现是google。 在golang关于rpc的官方包中&#xff0c;rpc主要有使用http/…

(7)Qt中的自定义槽(函数)

目录 槽函数定义的规则 关联信号与槽错误的示例 类成员函数函数做槽函数使用 静态类成员函数做槽函数使用 全局函数做槽函数使用 lambda表达式做槽函数使用 使用lambda表达式的注意事项 注意事项一&#xff1a; 注意事项二&#xff1a; 槽函数定义的规则 1.槽函数返回值…

多图解析KMP算法原理

KMP是什么 KMP是一种字符串匹配算法&#xff0c;能够判断字符串s2&#xff0c;是否为字符串s1的子串 例如&#xff1a;s1 "abd123def"&#xff0c;s2 "123"&#xff0c;KMP会返回4&#xff0c;代表s2是s1的子串&#xff0c;第一个匹配的下标为3 假设s…