RabbitMQ(一)--关于消息通信

RabbitMQ(一)--关于消息通信,第1张

1生产者:创建消息,发布消息到代理服务器(RabbitMQ)

(1)消息:有效荷载和标签

(2)有效荷载:消息的内容

(3)标签:用来描述消息(交换器的名称或者可选主题的标记),然后把消息交由RabbitMQ,由RabbitMQ进行后续处理

2消费者:连接到代理服务器(RabbitMQ),并订阅到队列(queue)上,接收代理服务器发布的消息并读取

(1)接收到的消息只包括有效荷载,即消息内容

1基本原理:首先创建一条TCP连接,TCP连接打开后(即通过认证),应用程序创建一条AMQP信道。

2信道:是建立在真实的TCP连接内的虚拟连接,AMQP命令是通过信道发送出去

3应用程序和RabbitMQ代理之间的连接用信道而不直接用TCP连接的原因

(1)一个信道处理一个线程,一个TCP连接可以承载多个信道,即多个线程可以使用同一个TCP连接,减少资源消耗,避免性能瓶颈

(2)一个TCP的创建和销毁对资源的消耗会很大,创建需要三次握手,销毁需要四次挥手。

4TCP协议的三次握手和四次分手

(1)建立连接的三次握手:

-第一次握手:客户端发送给服务端,请求连接

-第二次握手:服务端接收到客户端发送的请求连接的消息,回复给客户端请求连接

-第三次握手:上述两次握手本质上已经建立连接,但是此时客户端还会发送给服务端一个消息,确认连接,即表示连接成功

(2)销毁连接的四次挥手:

-第一次挥手:客户端发送给服务端,断开连接

-第二次挥手:服务端接收到请求断开连接的请求,发送确认消息

-第三次挥手:服务端发送给客户端,断开连接

-第四次挥手:客户端接收到服务端的消息,确认断开连接

注意:销毁连接需要四次挥手是因为TCP连接是双向连接,断开也需要双向断开和确认

rabbitmq接收消息怎转换成请求

作为一个,我无法确定您的具体需求,但是我可以给您提供一些基本的RabbitMQ消息处理的步骤和建议。

1 创建消息队列和交换机

在RabbitMQ中,您需要首先创建一个消息队列和一个交换机。消息队列是一种存储消息的容器,而交换机则是将消息路由到队列的组件。您可以使用RabbitMQ的管理界面或者命令行工具来创建它们。

2 定义消息格式

定义您的消息格式,这可以是任何您需要的格式,例如JSON、XML等。确保消息格式与您的应用程序兼容,并且包含所有必需的信息。

3 发送消息

在发送消息之前,您需要将消息发布到交换机中。您可以使用RabbitMQ的客户端库来完成此 *** 作。在发布消息时,您需要指定交换机的名称,消息的内容和其他必要的参数。

4 接收消息

在接收消息之前,您需要创建一个消费者来监听队列中的消息。您可以使用RabbitMQ的客户端库来创建消费者。一旦消费者被创建,它将开始监听队列中的消息并将其传递给您的应用程序。

5 处理消息

一旦您的应用程序接收到消息,它将需要进行处理。根据您的应用程序的需求,您可以将消息转换成请求,并将其发送到其他服务中。

6 返回响应

在处理请求后,您的应用程序将需要返回响应消息。您可以使用RabbitMQ的客户端库将响应消息发布到交换机中,以便其他服务可以接收并处理它。

总之,以上是一个基本的RabbitMQ消息处理流程。但是具体实现会根据您的应用程序需求而有所不同。

一、创建linux维护用户

登录root用户

创建新用户

useradd 新用户名

设置用户密码

passwd 新用户密码

二、安装jdk和配置环境变量

建议在root用户下直接安装jdk,并直接配置环境变量,同时给非root用户设置读和执行权限

解压包

tar xvf jdk包名tar

配置全局变量

编辑/etc/profile文件

vi /etc/profile

按I键,切换成编辑模式。

在文件未加入一下配置

export JAVA_HOME=jdk的解压文件目录

export JRE_HOME=jdk的解压文件目录/jre

export CLASSPATH=:${JAVA_HOME}/lib:${ JRE_HOME}/lib:$CLASSPATH

export JAVA_PATH=${JAVA_HOME}/bin:${ JRE_HOME}/bin

export PATH=$PATH:${JAVA_PATH}

保存并退出

Esc   

:wq

重载配置文件使其生效

source /etc/profile

检查是否安装成功

Javac

Java version

 

权限修改

读4写2执行1,顺序所有者、组成员、其他用户

Chomd  755  jdk的解压文件目录

三、安装tomcat

安装tomcat和放入war包使用非root的维护用户

如果使用root安装的话记得设置权限。( chomd -r 外层文件目录 )

su - 用户名

1、解压包

tar  xvf  tomcat包名tar

2、将war包放入tomcat/webapps目录下

3、Tomcat启动服务和停止服务

查看进程

ps -ef | grep java

启动应用

Tomcat bin目录下startupsh

停止应用

建议使用

Kill -9 进程号

注:解压出应用文件后,注意配置信息的修改

四、IBM MQ部署 (75之后的版本)

(以下是使用90版本的正确部署命令)

一、 卸载旧版本IBM MQ (可选)

<因为部署环境没有安装过mq,卸载这部分命令我没有亲自测试过>

设置环境

以用户身份登录到组mqm,找到mq的安装位置 /opt/mqm

source /setmqenv -s

 

查看队列管理器的状态

dspmq -o installation

停止与要卸载的安装关联的所有正在运行的队列管理器

endmqm SXRECV

 

停止与队列管理器关联的所有侦听器。

endmqlsr -m SXRECV

 

查看系统上当前安装的软件包(组件)

sudo rpm -qa | grep MQSeries

 

 

列出软件包并一次性卸载

 sudo rpm -qa | grep MQSeries | xargs rpm -ev

 

再将对应的用户及安装目录给删除

rm -rf /opt/mqm

userdel -r mqm

 

 

检查MQ license

license文件在安装目录中 /opt/mqm/lib 可以找到

 

amqtcertlic - is a trial license

amqbcertlic - is a beta license

amqpcertlic - is the production license

——————————————————————————————————————

二、安装新版本ibm mq

解压,解压文件都在MQServer中

tar –xzvf IBM_MQ_915_LINUX_X86-64targz

 

进入MQServer文件夹中:

cd MQServer/

 

运行MQ许可证程序

/mqlicensesh

 

安装WebSphere MQ for Linux服务器(Runtime、SDK 和 Server 软件包):

 rpm -U MQSeriesRuntime-915-0x86_64rpm

 rpm -U MQSeriesSDK-915-0x86_64rpm

 rpm -U MQSeriesServer-915-0x86_64rpm

 

 

安装WebSphere MQ for Linux客户机:

rpm -U MQSeriesClient-900-0x86_64rpm

 

安装WebSphere MQ样本程序:

rpm -U MQSeriesSamples-900-0x86_64rpm

 

创建组和用户

安装过程创建了一个名为mqm的用户和一个同样名为 mqm 的组。设置一个密码来解锁。

passwd mqm

 

——————————————————————————————————————

三、 配置

(这部分队列管理器、通道、队列等根据实际情况自行配置)

切换用户:

su mqm

 

创建队列管理器

使用crtmqm命令来创建一个名为 SXRECV

的队列管理器。我们把它作为缺省队列,并且将不在创建时指定死信队列。然后使用strmqm命令启动队列管理器。

crtmqm -q  SXRECV

strmqm  SXRECV

 

——————

如果执行crtmqm命令时提示

-bash-32$ crtmqm

-bash: crtmqm: command not found

find / -name crtmqm

则需要配置mqm用户的环境变量,编辑如下文件,并添加下面的内容,如下:

第一种方法:相对第二种较安全仅对mqm用户有效

 

方法一:

(1) -bash-32$ vi /var/mqm/bash_profile --有可能会在文件夹下看不到这个文件,通过编辑即可看到

PATH=$PATH:/opt/mqm/samp/bin:/opt/mqm/bin:bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin

(2)执行“”命令,使这个文件生效

-bash-32$ source  bash_profile

(3)再次尝试实行crtmqm或是dspmqm命令,即可发现已经生效。

 

方法二:

( 1)

su  root

[if !supportLists](2)[endif]

vim /etc/profile

[if !supportLists](3)[endif] 在最后面加上:

PATH=$PATH:/opt/mqm/samp/bin:/opt/mqm/bin:bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/bin

( 4)关闭远程终端重新打开,无需重启服务器

——————

 

运行队列管理器

runmqsc SXRECV

 

创建通道和队列

DEFINE QLOCAL (XYDATA) REPLACE USAGE (NORMAL) DEFPSIST (YES) MAXDEPTH (300000) DESCR('兴业银行')

DEFINE QLOCAL (XYTRANS) REPLACE USAGE (XMITQ) DEFPSIST (YES) MAXDEPTH (300000) DESCR('兴业银行')

DEFINE QREMOTE (XYACK) REPLACE DEFPSIST (YES) RQMNAME (SXSEND)  RNAME (XYACK) XMITQ (XYTRANS) DESCR('XXXX')

DEFINE CHANNEL (XYDATA) CHLTYPE (RCVR) TRPTYPE (TCP) REPLACE DESCR('XXXX')

DEFINE CHANNEL (XYACK) CHLTYPE (SDR) CONNAME ('166118(2214)') XMITQ (XYTRANS) TRPTYPE (TCP) DISCINT (0) CONVERT (NO) SHORTRTY (30) SHORTTMR (10) LONGRTY (999999999) LONGTMR (20) REPLACE DESCR('XXXX')

DEFINE CHANNEL (SVRCONN) CHLTYPE (SVRCONN) MCAUSER('mqm')

 

创建监听

DEFINE LISTENER (RECLISTENER) TRPTYPE (TCP) CONTROL(QMGR) PORT (2214)

启动监听

start LISTENER(RECLISTENER)

 

启动通道

start channel(SVRCONN)

start channel(XYDATA)

start channel(XYACK)

 

———————————————————————————————————————————————————

 

四、2035错误码 说明

如果程序连接mq报错2035,则需要对权限认证做设置,则进行以此 *** 作

1、

ALTER QMGR CHLAUTH(DISABLED)

2、

ALTER CHL(通道名) CHLTYPE(SVRCONN) MCAUSER('mqm')

3、

ALTER AUTHINFO(SYSTEMDEFAULTAUTHINFOIDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(OPTIONAL)

或者直接将连接认证选项置为空,将其完全关闭,指令如下:

ALTER QMGR CONNAUTH('')

 

在执行完上述两条命令中的任一条后,都需要刷新连接认证的缓存,指令如下:

REFRESH SECURITY TYPE(CONNAUTH)

五、mq *** 作命令

一、MQ的启动与停止

1、MQ的启动

strmqm QMgrName

如果启动默认队列管理器,strmqm后可以忽略队列管理器名称。

2、MQ的关闭

endmqm -i QMgrName

停止mq

二、MQ运行状态查看与常用 *** 作

1、 查看队列管理器运行状态

su mqm

执行如下命令检查队列管理器运行状态:dspmq显示结果中QMNAME表示MQ队列管理器的名称,STATUS表示当前运行状态。运行状态有如下几种:Starting正在启动Running正在运行Ending正在停止Ended normally已经正常终止Ended immediately已经立即终止Ended preemtively已经强制终止Ended unexpectively异常终止

注意:停止MQ后必须使用dspmq命令进行状态检查

2、查看通道运行状态与启停通道

runmqsc

dis chl();查看所有通道定义

dis chs();查看所有通道状态,如果没有查询到通道状态,或报错AMQ8420: Channel Status not found,请启动通道

dis chs(ChannelName); 查看通道ChannelName的状态

通道状态有如下几种:

STARTING正在启动BINDING正在绑定INITIALIZING正在初始化RUNNING正常STOPPING 正在停止RETRYING重试PAUSED等待STOPPED已停止REQUESTING请求

start chl(ChannelName);启动通道

stop chl(ChannelName);停止通道

重置通道

reset channel(ChannelName); 重置通道序号。当本地与其他MQ队列管理器的通道无法正常启动的情况,检查日志发现是通道序号不一致,此时就需要先停止发送方通道,清空队列深度并在发送方和接收方进行通道计数的重置,重置后启动通道即可恢复通讯。

注意:重置成功mq序列号一般相同或相差1

3、查看通道监听状态与启停监听

runmqsc

dis listner();查看通道监听定义

dis lsstatu(listnerName);查看监听状态

start lstr(listnerName); 启动监听

stop lstr(listnerName); 停止监听 

4、查看队列深度

runmqsc

dis q();查看所有各类队列的属性

dis qlocal(QName);查看所有本地队列的属性

队列深度属性为:CURDEPTH

查看队列深度display ql('队列名')  curdepth

清空队列深度

清空队列深度

clear ql(‘队列名’)

三、MQ发送和接收消息

su mqm

发送消息

amqsput  队列名  队列管理器

获取消息

amqsget  队列名  队列管理器

可通过配合查看队列深度命令,完成mq的联调

六、其他维护中常用linux命令

1、测试端口连接

telnet ip port

2、查看已启动的端口

netstat -an | grep 端口号

3、查看应用进程

ps -ef |grep java

4、修改权限

chomd  XXX(对应的权限)  文件目录

5、修改文件或目录下所有文件所有者和组

Chomd -R 用户名:组名  文件目录

6、查看目录内容

ls 或者ls -l (简写ll)

7、查看文件输出

cat 目录/文件名

或者

Vi 目录/文件名 按i可进入编辑

按 G 到文档末尾

按 gg 到文件首行

不保存退出

Esc   :q!

保存退出

Esc   :wq

vi 进入文档文档后查找关键字

Esc 进入命令行

/关键字

按n向下继续查找

按N向上继续查找

8、杀进程

Kill -9 进程号

9、复制

cp -r 源目录  目标目录

10、移动

mv  -i 源文件或目录 目标文件或目录

11、删除

 rm -R 文件目录

12、 切换工作目录

cd  相对路径或绝对路径

~也表示为 home 目录 的意思, 则是表示目前所在的目录, 则表示目前目录位置的上一层目录。

我也是个菜鸟,说下我的理解:IBM MQ是有“发送队列”、“接收队列”的。ActiveMQ没有“发送队列”、“接收队列”,就是普通的建一个“队列”,然后发消息到这个队列,从这个队列接收消息。

以上就是关于RabbitMQ(一)--关于消息通信全部的内容,包括:RabbitMQ(一)--关于消息通信、rabbitmq接收消息怎转换成请求、《Linux下部分常用指令笔记》等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9818324.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存