VMware+消息服务RabbitMQ+消息中间件(broker)+消息队列

本文介绍了如何在VMware中搭建Docker环境运行RabbitMQ,讲解了RabbitMQ作为消息中间件在服务解耦、流量削峰、异步调用中的作用,详细阐述了Exchange、Message Queue、Binding Key、Routing Key等核心概念,并探讨了简单模式、工作模式、发布订阅模式、路由模式和主题模式的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.VMware

1.2 vmware网络故障,可以重置网络

编辑 — 虚拟网络编辑器 – 左下角按钮“还原默认设置”

	会删除所有的虚拟网络,然后重新创建

1.3 NAT网络

统一设置成 64 网段

编辑 --- 虚拟网络编辑器 --- 选择 vmnet8 --- 左下角设置网段:192.168.64.0

1.4虚拟机

课前资料\虚拟机\

centos-8-2105
centos-7-1908

在这两个虚拟机中提供了基础配置:

阿里的 yum 安装源、扩展源
安装了 python、pip、ansible

ip设置的脚本工具:
ip-dhcp — 自动分配
ip-static — 设置固定ip

加载、启动虚拟机
1.解压缩 centos-8
2.双击 centos-8-2105.vmx
3.启动
4.按照提示选择“已复制虚拟机”
5.用户名和密码都是 root

网卡没有ip,或网卡不存在

# centos 7 禁用 NetworkManager 系统服务
systemctl stop NetworkManager
systemctl disable NetworkManager
​
# centos 8 开启 VMware 托管
nmcli n on
systemctl restart NetworkManager

2. Docker 运行Rabbitmq

2.1 搭建 Docker 环境

1.克隆 centos-8 或 centos-7: docker-base
2.设置ip

./ip-static
ip: 192.168.64.150
​
ifconfig

3.安装 docker
DevOps课前资料\docker\docker-install 文件夹上传到 /root/

4.按照如下用docker运行 rabbitmq
过程中需要联网下载 rabbitmq 的镜像

docker pull rabbitmq:management   在线下载镜像
​
执行  docker images 查看镜像
​
关闭防火墙
​
systemctl stop firewalld
systemctl disable firewalld
 
重启 docker 系统服务
​
systemctl restart docker
​
mkdir /etc/rabbitmq
​
vim /etc/rabbitmq/rabbitmq.conf
​
# 添加两行配置:
default_user = admin
default_pass = admin
​
docker run -d --name rabbit \
-p 5672:5672 \
-p 15672:15672 \
-v /etc/rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-e RABBITMQ_CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf \
rabbitmq:management
​
访问管理控制台 http://192.168.64.140:15672
用户名密码是 admin

在这里插入图片描述

3. RabbitMQ

RabbitMQ是一种消息中间件,用于处理来自客户端的异步消息。服务端将要发送的消息放入到队列池中。接收端可以根据RabbitMQ配置的转发机制接收服务端发来的消息。RabbitMQ依据指定的转发规则进行消息的转发、缓冲和持久化操作,主要用在多服务器间或单服务器的子系统间进行通信,是分布式系统标准的配置。

3.1服务解耦

A服务只需要向消息服务器发送消息,而不用考虑谁需要这些数据;下游服务如果需要数据,自行从消息服务器订阅消息,不再需要数据时则取消订阅即可
在这里插入图片描述

3.2流量削峰

使用RabbitMQ来进行流量削峰,高峰情况下,瞬间出现的大量请求数据,先发送到消息队列服务器,排队等待被处理,而我们的应用,可以慢慢的从消息队列接收请求数据进行处理,这样把数据处理时间拉长,以减轻瞬时压力
在这里插入图片描述

3.3 异步调用

引入RabbitMQ消息队列,订单数据可以发送到消息队列服务器,那么调用链路也就可以到此结束,订单系统则可以立即得到响应,整条链路的响应时间只有200毫秒左右.寻找外卖小哥的应用可以以异步的方式从消息队列接收订单消息,再执行耗时的寻找操作
在这里插入图片描述

3.4 Exchange

接受生产者发送的消息,并根据Binding规则将消息路由给服务器中的队列。在RabbitMQ中,ExchangeType常用的有direct、Fanout和Topic三种交换机,ExchangeType决定了Exchange路由消息的行为。

3.5 Message Queue

消息队列。我们发送给RabbitMQ的消息最后都会到达各种queue,并且存储在其中(如果路由找不到相应的queue则数据会丢失),等待消费者来取。

3.6 Binding Key

它表示的是Exchange与Message Queue是通过binding key进行联系的,这个关系是固定。

3.7 Routing Key

生产者在将消息发送给Exchange的时候,一般会指定一个routing key,来指定这个消息的路由规则。这个routing key需要与Exchange Type及binding key联合使用才能生,我们的生产者只需要通过指定routing key来决定消息流向哪里。

3.8 简单模式

只有一个消费者.
在这里插入图片描述

3.8.1添加依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.tedu</groupId>
    <artifactId>rabbitmq-api</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
    <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
        <version>5.4.3</version>
    </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

3.8.2 生产者发送消息

package m1;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Producer {
   
    public static void main(String[] args) throws IOException, TimeoutException {
   
        //连接
        ConnectionFactory f = new ConnectionFactory();
        f.setHost("wht6.cn"); //wht6.cn,192.168.64.140
        f.setPort(5672);
        f.setUsername("admin");
        f.setPassword("admin");
        Connection con = f.newConnection();
        Channel c = con.createChannel();

        //创建队列 hello-world,如果队列已经存在,不会重复创建
        c.queueDeclare("hello-world-我是田新潘",false,false,false,null);
        //发送消息
        //参数:  c.basicPublish(1.交换机"AMQP-default",2.队列名,3.消息的其他属性,4.内容())
        c.basicPublish("", "hello-world", null, "加油!".getBytes());

    }
}

3.8.3 消费者接收消息

package m1;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Consumer {
   
    public static 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值