消息中间件ActiveMQ学习笔记(一) [初步学习,安装使用]

近期计划学习一下消息队列;
找到的学习视频地址:尚硅谷ActiveMQ教程快速入门



1.基础概念


  • 消息, 也就是具有发送方和接收方的一个通信方式.
  • 消息中间件:消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。
  • 本次学习的ActiveMQ 具有MQ的高可用性,支持api发送和接收,集群和容错配置,持久化,延时发送以及定时投递消息,签收机制;且可以整合到spring中.

MQ为什么要出现

直接画图,模拟一个设想的MQ效果,
使用MQ之后,很好地解决了耦合调用问题;
同时这个中间人也阻挡了一大部分的流量袭击;抵挡洪峰流量,削峰,保护了主要的业务;
那么这个操作就可以专心于自己的事情;
原本需要等待的B,C,D,....等人,给中间人说明情况后,可以去做自己的事情了,不需要在这里一直等待;也就是一种异步通知操作吧.

在这里插入图片描述


系统直接调用会出现的一些问题


微服务架构后,常用的这个链式调用;比如模块 A 调用模块 B,模块 B 调用模块 C,模块 C 调用模块 D。但在大型分布式应用中,系统间的 RPC 交互繁杂,一个功能背后要调用上百个接口并非不可能,从单机架构过渡到分布式微服务架构的通例.

那么系统直接调用会出现的一些问题:

(1)系统直接的接口相互调用,就会出现耦合度过高的问题,系统模块之间的依赖关系过于密切.

  • 比如说,系统A本来和支付系统B,物流系统C组成了一个完整的系统,之间数据传输也比较完善;
  • 但是后来又出于新的业务考虑,新增了一个安全系统D,那么D系统也需要A的数据,就要去改动系统A;
  • 在这样的架构中,每次出现/减少一个下级系统,都需要对上级系统进行改动.

在这里插入图片描述

(2)无法抵御大量的并发流量来袭;

在系统中每个接口模块的吞吐能力是有限的,当大流量来袭容易被击穿。

比如说这样一个下单的操作:看似简单的一个操作,在底层实际要完成多步操作,
若此时出现大量的高并发流量来袭,那么这些底层的操作能否保证一定不会出现问题呢???

举个例子秒杀业务:上游系统发起下单购买操作,就是下单一个操作,很快就完成。然而,下游系统要完成秒杀业务后面的所有逻辑(读取订单,库存检查,库存冻结,余额检查,余额冻结,订单生产,余额扣减,库存减少,生成流水,余额解冻,库存解冻)

(3)大量同步等待时,就会出现阻塞性能消耗问题

在同步调用的情境下,整体的服务性能遵循“木桶理论”,即整体系统的耗时取决于链路中最慢的那个接口。

比如A调用下面3个子系统都用时平均5秒,但是B系统又需要调用自己的子系统E20秒,
那么以A为中心的这个系统就得耗时25秒

在这里插入图片描述


需要对于系统直接调用的问题,就得考虑解耦,削峰,异步;

  • 解耦:解决系统之间紧密的耦合调用;
  • 削峰:可以设置一个流量缓冲池,让后端系统按自己的吞吐量进行配置;
  • 异步,避免了调用者的长时间等待问题.

介绍MQ


MQ实际就是面向消息的中间件MOM(message-oriented middleware)

  • 可使用高效安全的消息传输机制,与平台无紧要关联的数据交流,基于数据通信集成分布式系统;
  • 通过消息传递消息排队模型在分布式的环境下进行应用解耦;
  • 可以做到数据的冗余处理,异步消息通信,高流量削峰,适应性解耦,弹性伸缩;

当一个消息发到消息服务器之后, 这个消息服务器会将该消息存入到消息队列中;在接受者不忙的时候,将该消息发给接受者; 这整个处理的过程中,都是得要异步通信的,避免了过多的等待而产生效率问题; 这个也可以完成一对多的通信,一个消息可以发给多个接收者去处理.

在这里插入图片描述


MQ的特点之处

  • 消息发送者可以发送一个消息而无须等待响应
  • 消息接收者订阅/监听这个通道。
  • 消息可以转发给一个或者多个消息接收者,整个过程都是异步的。
  • 发送者和接收者不需要过多地了解对方的信息, 而且发送者和接收者也不需要同时都必须在线;

比如说这样模拟一个订单系统

在这里插入图片描述


MQ固然有利,当然也有弊==>两个系统不能同步调用不能实时回复不能响应某个调用的回复


2.下载安装使用ActiveMQ


http://activemq.apache.org/进行下载;

在这里插入图片描述

由于我常用Java8版本,也就下了这个版本的linux版;

在这里插入图片描述


解压安装


下载之后, 使用ftp文件传输工具,将jar包传送到服务器;

在这里插入图片描述


使用命令进行解压;

tar -zxvf apache-activemq-5.16.4-bin.tar.gz

在这里插入图片描述
在这里插入图片描述


将该文件拷贝到根目录下的myactiveMQ文件夹中;

cp -r apache-activemq-5.16.4 /myactiveMQ/

在这里插入图片描述
在这里插入图片描述


cd /myactiveMQ/apache-activemq-5.16.4

基本启动命令

./activemq start

在这里插入图片描述

注意这个使用MQ需要java环境;
我这里之前已经安装过了Java的jdk环境;
可用java -version 查看使用的版本.
在这里插入图片描述


查看进程的三种方式

activemq的默认端口为61616

(1)查看进程的方式一:

可使用该命令查看activemq的进程;

 ps -ef|grep activemq

在这里插入图片描述

当然,在查看进程时,可使用命令隐藏一些不需要看到的信息

ps -ef|grep activemq|grep -v grep

在这里插入图片描述
(2)查看进程的方式二:
可查看和这个61616的端口是否被占用了,类似于一种kv键值对的格式;
若该端口在使用,则将会查到对应的进程号

netstat -anp|grep 61616

在这里插入图片描述
(3)查看进程的方式三:
使用命令,也可以精确查询到指定端口的启用进程情况;

lsof -i:61616

在这里插入图片描述


基本关闭命令

关闭activemq使用的命令;

./activemq stop

在这里插入图片描述


自定义日志文件启动

带有日志的启动方式;
即在这里运行同级目录下,生成一个日志文件,便于查看运行中的问题;
使用命令;

./activemq start > /myactiveMQ/myrunmq.log

此时已经启动,但是没有打印之前的那种启动信息;
在这里插入图片描述
因为它已经把生成的运行信息打印到了日志文件中;

在这里插入图片描述

可使用编辑命令查看日志

 vi /myactiveMQ/myrunmq.log

在这里插入图片描述


ActiveMQ 控制台


现在虽然可以用命令启动ActiveMQ,可是前台看不到效果;
比如之前学习的tomcat服务器,我们就可以运行,在网页看到效果;

注意 在前台访问时,端口号为 8161
默认的用户名和密码为 admin admin

那么现在模拟使用, 将windows作为显示使用的客户端; Linux下的activeMQ作为服务器;

  • 先用命令查看自己的linuxIP地址;
    我的linuxip为:192.168.59.128
ifconfig

在这里插入图片描述

  • 查看自己的windowsip;
    在本地cmd命令窗口输入ipconfig查看自己的ip
    我这里是192.168.116.1

在这里插入图片描述

  • 那么要做到两个操作系统之间可以交互,首先要ping通ip;
    这里先关掉linux的防火墙;
    输入命令
service iptables stop

或centOS7版本使用;

systemctl stop firewalld
  • 在windows和linux进行 ping通对方的ip;
    在Linux去pingwindows的Ip
    在这里插入图片描述
    windows中pingLinux的IP
    在这里插入图片描述

麻了,我这里一直访问不上去;
只能查看防火墙是否开放了8161这个端口

firewall-cmd --query-port=8161/tcp

开放端口

firewall-cmd --zone=public --add-port=8161/tcp --permanent

重启防火墙

firewall-cmd --reload

访问还是不行,
在activemq安装的文件目录conf中改变jetty.xml文件中的host值; 127.0.0.1 改为0.0.0.0
在这里插入图片描述

终于访问到了http://192.168.59.128:8161/admin/

在这里插入图片描述


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小智RE0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值