阿丹有话说:
因为项目中涉及到发送短信、异步发送邮件、还有异步书写日志异步更新数据库(es索引库,redis缓存等)。这时候就需要使用消费中间件。可以大大的加速消息发送等的速度!
简介:
当今互联网应用场景中,消息队列是一种常用的异步通信方式,同时也是构建微服务架构和数据分析系统的关键部分之一。消息队列主要有两大类:点对点两种模式和发布-订阅模式。在点对点通信模式下,生产者向队列中发送消息,在队列中等待的消费者可以从队列中取出消息,但是一条消息只能被一个消费者获取。在发布-订阅模式下,生产者向主题中发送消息,主题可以有多个消费者订阅,每个消费者都可以独立地获取消息。
Kafka 是一个通过分布式消息传递提供高吞吐量的数据存储解决方案,它使用高效且可扩展的分布式架构存储消息,提供了实时数据管道和流处理功能。Kafka 的数据模型基于发布-订阅模式,并使用分区和副本存储数据,从而提供高可用性和弹性。Kafka 经常用于构建实时数据管道、日志处理、流处理和一些大数据应用程序,例如 Apache Spark、Flink、Storm、HBase 等等。
相比之下,MQ(Message Queue)是一种企业级消息传递基础设施,用于应用程序之间的通信,MQ 提供的主要功能包括高可靠性、高可用性和基于时序消息的全局状态管理。MQ 通常用于构建企业级应用、微服务架构、可靠消息通信或异步事件处理的框架。一些常用的 MQ 产品包括 ActiveMQ、RabbitMQ、RocketMQ 和 IBM MQ 等等。
前面我写过rabbit的用法这次补上配置文件以及安装,算是给前面填个坑!
1、打开docker目录 2、创建rabbitmq的文件夹 3、打开rabbitmq文件夹
cd /usr/local/docker/
mkdir rabbitmq
cd rabbitmq/
直接复制粘贴上面的代码就可以了,实现了创建了一个rabbitmq的文件夹。
创建挂载目录
mkdir data
1、编写/编辑脚本文件
vim startRabbitMq.sh
2、脚本内容
docker run -d \
-v /usr/local/docker/rabbitmq/data:/var/lib/rabbitmq \
-p 5672:5672 -p 15672:15672 \
--name rabbitmq \
--restart=always \
--hostname myRabbit rabbitmq:3.9.13-management
复制粘贴完毕了以后
1、按下esc
2、使用shift+:
3、输入wq!
对修改文件进行保存。
docker run -d
:表示以后台模式启动 Docker 容器。
-v /usr/local/docker/rabbitmq/data:/var/lib/rabbitmq
:表示将本地路径 /usr/local/docker/rabbitmq/data
映射到容器内的路径 /var/lib/rabbitmq
,用于存储 RabbitMQ 数据。
-p 5672:5672 -p 15672:15672
:表示将容器内的端口 5672 映射到本地的端口 5672 上,用于 AMQP(Advanced Message Queuing Protocol) 协议的连接。同时将容器内的端口 15672 映射到本地的端口 15672 上,用于 RabbitMQ 管理界面的访问。
--name rabbitmq
:给容器指定一个名称,这里是 rabbitmq
。
--restart=always
:设置容器启动时自动重启。
--hostname myRabbit
:设置容器的主机名为 myRabbit
。
rabbitmq:3.9.13-management
:指定要启动的镜像名称和版本,这里是带有管理界面的 RabbitMQ 3.9.13 镜像。
这段命令的主要作用是启动一个基于 RabbitMQ 镜像的容器,映射数据卷,指定端口映射,设置容器名称、主机名和重启策略等。
chmod -R 700 startRabbitMq.sh
解释:
这个命令将 `startRabbitMq.sh` 文件及其子文件夹下所有文件的权限改为只有文件所有者具有读、写、执行权限,其他用户没有任何权限。权限配置的格式为 `rwx`,其中 `r` 表示读权限、`w` 表示写权限、`x` 表示执行权限。在这个命令中,权限配置中没有设置其他用户的权限,因此其他用户对这个文件及其子文件夹下的所有文件都没有任何权限。更具体地说,这个命令把 `startRabbitMq.sh` 及其子文件夹下的所有文件设置为只有所有者有读、写、执行权限,而其他用户则没有任何权限。
./startRabbitMq.sh
开始下载镜像以及安装,安装完毕之后会进行运行。
在docker中看一下是否运行。
docker ps -a
使用服务器的ip地址+ 15672来对rabbitMQ进行访问。
出现这个页面就是成功了!账号和密码都是:guest
Kafka 是一个分布式流媒体平台, 类似于消息队列或企业消息传递系统。
kafka官网:Apache Kafka
因为kafka对于zookeeper是强依赖的,zookeeper中有kafka很多的节点数据。具体原因为Kafka 是一个分布式系统,需要一个可靠的协调服务来管理集群状态和元数据,这就是 ZooKeeper 所扮演的角色。Kafka 使用 ZooKeeper 存储集群状态和元数据,包括 Kafka 消费者和分区的分配信息、每个分区的存储位置、生产者 ID 和消费者组等信息。在 Kafka 集群启动时,生产者和消费者会通过 ZooKeeper 发现并连接到合适的 Kafka 代理节点。而且 Kafka 中的发布-订阅模型也是基于 ZooKeeper 实现的。因此,ZooKeeper 对于 Kafka 是必需且强依赖的。
所以在安装kafka之前必须要安装zookeeper
docker pull zookeeper:3.4.14
docker run -d \
--privileged=true \
--name zookeeper \
--restart=always \
-p 2181:2181 zookeeper:3.4.14
代码解释:
docker run -d
:表示以后台模式启动 Docker 容器。
--privileged=true
:表示开启特权模式,大多是为了支持一些特殊的系统调用。
--name zookeeper
:给容器指定一个名称,这里是 zookeeper
。
--restart=always
:设置容器启动时自动重启。
-p 2181:2181
:表示将容器内的端口 2181 映射到本地的端口 2181 上,用于 ZooKeeper 客户端的连接和通信。
zookeeper:3.4.14
:指定要启动的镜像名称和版本,这里是 ZooKeeper 3.4.14 镜像。
这个命令的主要作用是启动一个基于 ZooKeeper 镜像的容器,开启特权模式,指定容器名称、重启策略和端口映射。
docker pull wurstmeister/kafka:2.12-2.3.1
其中的XXX.XXX.XXX要更换为自己的服务器或者虚拟机的ip
docker run -d \
--privileged=true \
--name kafka \
--restart=always \
--env KAFKA_ADVERTISED_HOST_NAME=XXX.XXX.XXX.XXX \
--env KAFKA_ZOOKEEPER_CONNECT=XXX.XXX.XXX.XXX:2181 \
--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://XXX.XXX.XXX.XXX:9092 \
--env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
--env KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" \
--net=host wurstmeister/kafka:2.12-2.3.1
这就是启动了,然后我去docker容器中看一下是否在运行
docker ps -a
代码解释:
这个 Docker 命令启动了一个 Kafka 服务容器。这里是一些命令的解释:
docker run -d
:这个表示以后台模式运行容器。
--privileged=true
:运行容器时开启特权模式。
--name kafka
:这个设置容器的名称,这里是 kafka
。
--restart=always
:这个表示容器启动后自动重启。
--env KAFKA_ADVERTISED_HOST_NAME=XXX.XXX.XXX.XXX
:这个设置 Kafka 服务的 advertised host 名称,其中 XXX.XXX.XXX.XXX 表示主机的 IP 地址。
--env KAFKA_ZOOKEEPER_CONNECT=XXX.XXX.XXX.XXX:2181
:这个设置 Kafka 服务所连接的 ZooKeeper 地址,其中 XXX.XXX.XXX.XXX 表示 ZooKeeper 服务的 IP 地址,2181 表示 ZooKeeper 的端口号。
--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://XXX.XXX.XXX.XXX:9092
:这个设置 Kafka 服务的 advertised listeners,其中 XXX.XXX.XXX.XXX 表示主机的 IP 地址。
--env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
:这个设置 Kafka 服务的 listeners。
--env KAFKA_HEAP_OPTS="-Xmx256M -Xms256M"
:这个设置 Kafka 服务的 JVM 堆大小,如在本例中为 256MB。
--net=host
:用于告诉 Docker 框架连接主机网络。
wurstmeister/kafka:2.12-2.3.1
:这个指定运行的 Kafka 镜像。 在这里是 wurstmeister/kafka 2.12-2.3.1 镜像。
总体而言,该命令启动了一个 Kafka 服务容器,指定了相关的环境变量和特权模式,并将容器连接到主机网络。