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