irpas技术客

5.2 学习总结 config配置中心,Rabbitmq六种工作模式_愿逐月华!_rabbitmq设置开机自启动

网络 3734

1 Spring cloud config 配置中心

集中地管理和维护配置文件 微服务启动时,从服务器获取配置文件

1.1 准备 git 仓库

现在本地准备一个文件夹存放2,3,4的配置文件,再把文件夹放到 git 仓库

在 gitee 创建仓库

springcloud1开源

在 springcloud1 工程目录下,新建一个文件夹:config

把 2,3,4 的 application.yml 复制到 config 目录,并改名

item-service-dev.ymluser-service-dev.ymlorder-service-dev.yml

创建本地仓库

double shift – 搜索 create git repository(有中文插件用汉字搜索)

选择 springcloud1 工程目录,设置成本地仓库

double shift – 搜索 commit

勾选所有文件、填写提交信息,然后点提交按钮

把本地仓库推送到远程仓库

double shift – 搜索 push

点 define remote 链接

粘贴远程仓库的地址,完成推送

1.2 搭建配置中心

新建 spring 模块:sp09-config

添加依赖

eureka clientconfig server

yml

spring: application: name: config-server cloud: config: server: git: uri: https://gitee.com/shixumin/springclould1 #创建的git仓库地址 search-paths: config server: port: 6001 eureka: client: service-url: defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka

启动类注解:@EnableConfigServer

验证

注册表中有 config-serverhttp://localhost:6001/item-service/devhttp://localhost:6001/user-service/devhttp://localhost:6001/order-service/dev

1.3 配置中心的客户端 把 2,3,4 的 application.yml 都注释掉添加依赖: config client <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> 添加新的配置文件: bootstrap.yml eureka地址设置配置中心的服务id下载的配置文件 # 引导配置,应用启动之前会先执行引导配置 #应用启动时才会执行 application.yml #从配置中心下载配置,再使用下载的配置启动应用 # 1.连接eureka # 2.从注册表获得config-server的地址 # 3.从config-server下载配置文件 eureka: client: service-url: defaultZone: http://eureka1:2001/eureka,http://eureka2:2002/eureka spring: cloud: config: discovery: enabled: true # #2.从注册表获得config-server的地址 service-id: CONFIG-SERVER #3.从config-server下载配置文件 user-service-dev.yml name: user-service profile: dev 1.4 检查确认 按顺序启动项目 05-eureka,等待05完全启动09-config,等待09完全启动03-user 检查配置中心 注册表中有 config-serverhttp://localhost:6001/item-service/devhttp://localhost:6001/user-service/devhttp://localhost:6001/order-service/dev 03-user 的控制台日志,有没有连接 6001 服务器

更换仓库再测试

注意:先启动02的话 ,会连接默认配置中心 localhost:8888

VMware 1.1 ip设置失败 # centos 7 禁用 NetworkManager 系统服务 systemctl stop NetworkManager systemctl disable NetworkManager # centos 8 开启 VMware 托管 nmcli n on systemctl restart NetworkManager 1.2 安装 Docker 环境 关闭虚拟机右键点虚拟机–管理–克隆点三下下一步,起名字: docker-base启动虚拟机执行 ifconfig 查看 ip用 MobaXterm 工具连接服务器,上传文件到 /root/ DevOps课前资料\docker\docker-install 文件夹 按 csdn 离线安装 docker 笔记 上传离线安装包 rabbitmq-install 目录上传到 /root 切换到rabbitmq-install目录 cd rabbitmq-install 安装 rpm -ivh *.rpm Rabbitmq

消息服务、消息队列、消息中间件 Broker

常见的消息服务器:

RabbitmqActivemqRocketmqKafkaTubemq 搭建 Rabbitmq 服务器 1. 关闭 docker-base,从docker-base克隆: rabbitmq 2. 设置固定ip ./ip-static ip: 192.168.64.140 ifconfig 3. 上传文件到 /root/ DevOps课前资料\docker\rabbit-image.gz 4. 导入镜像 systemctl restart docker docker load -i rabbit-image.gz docker images 5. 按照 rabbitmq 笔记 – docker 启动rabbitmq,启动rabbitmq 容

关闭防火墙

systemctl stop firewalld systemctl disable firewalld #取消开机自启 # 重启 docker 系统服务 systemctl restart docker

配置管理员用户名和密码

mkdir /etc/rabbitmq vim /etc/rabbitmq/rabbitmq.conf # 添加两行配置: default_user = admin default_pass = admin

启动Rabbitmq

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 \ --restart=always \ rabbitmq:management

访问管理控制台 http://192.168.64.140:15672 用户名密码是 admin

3 rabbitmq六种工作模式 3.1 简单模式

发送消息的程序是生产者队列就代表一个邮箱。虽然消息会流经RbbitMQ和你的应用程序,但消息只能被存储在队列里。队列存储空间只受服务器内存和磁盘限制,它本质上是一个大的消息缓冲区。多个生产者可以向同一个队列发送消息,多个消费者也可以从同一个队列接收消息.消费者等待从队列接收消息

pom依赖

<dependencies> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.4.3</version> </dependency> </dependencies> 生产者发送消息 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 { // 1.连接服务器 ConnectionFactory f = new ConnectionFactory(); f.setHost("192.168.64.140"); f.setPort(5672);//5672 收发消息端口 , 15672 管理控制台界面的端口 f.setUsername("admin"); f.setPassword("admin"); Connection con = f.newConnection(); //建立信道 Channel c = con.createChannel(); //通信新增 // 2.在服务器上创建一个队列 : helloworld //如果队列在服务器上已存在,不会重复创建 /* *参数: * 第二个参数durable: 是否是持久队列 * 3 exclusive:是否是排他队列,独占队列 * 4 autoDelete:是否自动删除 * 5 arguments: 队列的其他属性 */ c.queueDeclare("helloworld",false,false,false,null); // 3.向helloworld队列发送消息 /* 1. "" 空串 默认的交换机 2. -routingKey: 对于默认交换机,路由键就是目标队列名称 * 3. -props: 其他参数,例如头信息 * 4. -body: 消息内容byte[]数组 */ c.basicPublish("", "helloworld", null, "helloworld!".getBytes()); System.out.println("消息已发送"); c.close(); con.close(); } } 消费者接收消息 import com.rabbitmq.client.*; import java.io.IOException; import java.util.concurrent.TimeoutException; public class Consumer { public static void main(String[] args) throws IOException, TimeoutException { // 连接 // 1.连接服务器 ConnectionFactory f = new ConnectionFactory(); f.setHost("192.168.64.140"); f.setPort(5672);//5672 收发消息端口 , 15672 管理控制台界面的端口 f.setUsername("admin"); f.setPassword("admin"); Connection con = f.newConnection(); //建立信道 Channel c = con.createChannel(); //通信新增 // 2.在服务器上创建一个队列 : helloworld //如果队列在服务器上已存在,不会重复创建 c.queueDeclare("helloworld",false,false,false,null); // 3.创建回调对象 //DeliverCallback 处理消息 //方式1 new 匿名内部类 DeliverCallback deliverCallback = new DeliverCallback() { @Override public void handle(String s, Delivery message) throws IOException { byte[] a = message.getBody(); s = new String(a); System.out.println("收到:"+s); } }; //方式2 Lambda表达式 // DeliverCallback deliverCallback = (consumerTag, message) -> { // byte[] a = message.getBody(); // String s = new String(a); // System.out.println("收到:"+s); // }; CancelCallback cancelCallback=consumerTag -> {}; // 4. 开始接受消息,把消息传递给一个回调对象进行处理 //第2个参数 autoAck: 是否自动确认 c.basicConsume("helloworld", true, deliverCallback, cancelCallback); } } 3.2 工作模式

一个生产者,多个消费者,每个消费者获取到的消息唯一

自动模式 消费者从消息队列获取消息后,服务端就认为该消息已经成功消费。手动模式 消费者从消息队列获取消息后,服务端并没有标记为成功消费 消费者成功消费后需要将状态返回到服务端 4 查看有没有暴露bus-refresh

http://localhost:6001/actuator

查看2,3,4 控制台有没有重连配置中心,重新下载相应配置(商品,用户,订单配置)

POST http://localhost:6001/actuator/bus-refresh

bus 消息总线 (动态配置刷新) sleuth + Zipkin 链路跟踪

zipkin 可以收集链路跟踪数据,提供可视化的链路分析

java -jar zipkin-server-2.12.9-exec.jar --zipkin.collector.rabbitmq.uri=amqp://admin:admin@192.168.64.140:5672 java -jar zipkin-server-2.23.16-exec.jar --zipkin.collector.rabbitmq.uri=amqp://admin:admin@192.168.64.140:5672

微服务添加 zipkin 起步依赖

修改以下微服务

sp02-item-service sp03-user-service sp04-order-service sp11-zuul <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #rabbitmq设置开机自启动 #1 #Spring #Cloud #config #准备 #Git