config配置中心的作用:项目的yml 配置文件保存到 git 服务器,例如 github.com 或 gitee.com
微服务启动时,从服务器获取配置文件
1.新建 “Project”,命名为 config。注意这里的不是maven项目,而是project
2.将sp02,sp03,sp04,sp11四个项目的yml配置文件,复制到config项目,并改名
item-service-dev.yml
user-service-dev.yml
order-service-dev.yml
zuul-dev.yml
3.最后,清空四个项目中的application.yml文件
4.禁止配置中心的配置信息覆盖客户端配置
默认配置中心配置优先级高,配置中心配置会覆盖客户端的所有配置,包括命令行参数配置,这样我们在item-service和order-service中配置的端口号启动参数会无效
item-service 启动参数:
–service.port=8001
–service.port=8002
order-service 启动参数
–service.port=8201
–service.port=8202
我们可以设置禁止配置中心的配置将客户端配置覆盖掉
在四个配置文件中添加下面的配置
spring:cloud:
# 如果本地配置优先级高,那么 override-none 设置为 true,包括系统环境变量、本地配置文件等配置config:override-none: true
5.将 config 项目上传到 github
新建仓库
仓库命名
将项目分享到仓库
选择新建本地仓库
仓库目录选择工作空间目录下一个新目录: sp-config
提交项目
填写sp12-config仓库地址
查看远程仓库文件
config 服务器
config 配置中心从 git 下载所有配置文件。
而其他微服务启动时从 config 配置中心获取配置信息。
1.新建 sp12-config 项目
2.pom.xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>cn.tedu</groupId><artifactId>sp12-config</artifactId><version>0.0.1-SNAPSHOT</version><name>sp12-config</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><spring-cloud.version>Hoxton.SR12</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
3.application.yml
spring:application:name: config-servercloud:config:server:git:uri: https://gitee.com/你的个人路径/sp-configsearchPaths: config#username: your-username#password: your-passwordserver:port: 6001eureka:client:service-url:defaultZone: http://eureka1:2001/eureka,http://eureka2:2002/eureka
4.主程序添加 @EnableConfigServer 和 @EnableDiscoveryClient
package cn.tedu.sp12;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.config.server.EnableConfigServer;@EnableConfigServer
@EnableDiscoveryClient
@SpringBootApplication
public class Sp12ConfigApplication {public static void main(String[] args) {SpringApplication.run(Sp12ConfigApplication.class, args);}}
5.启动,访问测试
访问 item-service-dev.yml 可以使用以下形式:
http://localhost:6001/item-service-dev.yml
http://localhost:6001/item-service/dev
测试其他文件
http://localhost:6001/user-service/dev
http://localhost:6001/zuul/dev
http://localhost:6001/order-service/dev
6.config 客户端
修改以下项目,从配置中心获取配置信息
sp02-itemservice
sp03-userservice
sp04-orderservice
sp11-zuul
pom.xml 添加 config 客户端依赖
右键点击项目,编辑起步依赖,添加 config client 依赖
在四个项目中添加 bootstrap.yml
bootstrap.yml,引导配置文件,先于 application.yml 加载
item-service
spring: cloud:config:discovery:enabled: trueservice-id: config-servername: item-serviceprofile: deveureka:client:service-url:defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
user-service
spring: cloud:config:discovery:enabled: trueservice-id: config-servername: user-serviceprofile: deveureka:client:service-url:defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
order-service
spring: cloud:config:discovery:enabled: trueservice-id: config-servername: order-serviceprofile: deveureka:client:service-url:defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
zuul
spring: cloud:config:discovery:enabled: trueservice-id: config-servername: zuulprofile: deveureka:client:service-url:defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
7.启动服务,观察从配置中心获取配置信息的日志
RabbitMQ的安装
1.RabbitMQ基本概念:
RabbitMQ是一种消息中间件,用于处理来自客户端的异步消息。服务端将要发送的消息放入到队列池中。接收端可以根据RabbitMQ配置的转发机制接收服务端发来的消息。RabbitMQ依据指定的转发规则进行消息的转发、缓冲和持久化操作,主要用在多服务器间或单服务器的子系统间进行通信,是分布式系统标准的配置。
2.RabbitMQ使用场景
服务解耦
假设有这样一个场景, 服务A产生数据, 而服务B,C,D需要这些数据, 那么我们可以在A服务中直接调用B,C,D服务,把数据传递到下游服务即可
但是,随着我们的应用规模不断扩大,会有更多的服务需要A的数据,如果有几十甚至几百个下游服务,而且会不断变更,再加上还要考虑下游服务出错的情况,那么A服务中调用代码的维护会极为困难
这是由于服务之间耦合度过于紧密
再来考虑用RabbitMQ解耦的情况
A服务只需要向消息服务器发送消息,而不用考虑谁需要这些数据;下游服务如果需要数据,自行从消息服务器订阅消息,不再需要数据时则取消订阅即可
流量削峰
假设我们有一个应用,平时访问量是每秒300请求,我们用一台服务器即可轻松应对
而在高峰期,访问量瞬间翻了十倍,达到每秒3000次请求,那么单台服务器肯定无法应对,这时我们可以考虑增加到10台服务器,来分散访问压力
但如果这种瞬时高峰的情况每天只出现一次,每次只有半小时,那么我们10台服务器在多数时间都只分担每秒几十次请求,这样就有点浪费资源了
这种情况,我们就可以使用RabbitMQ来进行流量削峰,高峰情况下,瞬间出现的大量请求数据,先发送到消息队列服务器,排队等待被处理,而我们的应用,可以慢慢的从消息队列接收请求数据进行处理,这样把数据处理时间拉长,以减轻瞬时压力
这是消息队列服务器非常典型的应用场景
异步调用
考虑定外卖支付成功的情况
支付后要发送支付成功的通知,再寻找外卖小哥来进行配送,而寻找外卖小哥的过程非常耗时,尤其是高峰期,可能要等待几十秒甚至更长
这样就造成整条调用链路响应非常缓慢
而如果我们引入RabbitMQ消息队列,订单数据可以发送到消息队列服务器,那么调用链路也就可以到此结束,订单系统则可以立即得到响应,整条链路的响应时间只有200毫秒左右
寻找外卖小哥的应用可以以异步的方式从消息队列接收订单消息,再执行耗时的寻找操作
3.RabbitMQ安装
第一步:安装erlang语言库
RabbitMQ使用了Erlang开发语言
RabbitMQ官方精简的Erlang语言包,依赖rpm安装包
https://github.com/rabbitmq/erlang-rpm
下载和安装
这两条命令都是在linux系统中去完成的:
# 下载Erlang语言包
wget https://github.com/rabbitmq/erlang-rpm/releases/download/v21.2.6/erlang-21 .3.8.12-1.el7.x86_64.rpm
# 安装Erlang
rpm -ivh erlang-21.2.6-1.el7.x86_64.rpm --force --nodeps第二步:安装socat依赖
socat依赖包
http://pkgs.org/download/socat
``![在这里插入图片描述](https://img-blog.csdnimg.cn/9bfd489b48dc46708bcd64de548ad205.png)
`
http://centos.pkgs.org/7/centos-x86_64/socat-1.7.3.2-2.el7.x86_64.rpm.html
![在这里插入图片描述](https://img-blog.csdnimg.cn/f07eb20a58cd4536a571005cbd7f590b.png)
下载和安装
这两条命令都是在linux系统中去完成的:
下载 socat rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/socat-1.7.3.2-2.el7.x8 6_64.rpm
安装 socat 依赖包
rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
相关的命令解释:
rpm -ivh其中的-i (install 安装软件包 ) -v (view 可视化)-h ( hour 方便自己记忆 显示安装进度 )简单来讲就是 可视化并显示进度地 安装软件第三步:安装rabbitmq
rabbitmq安装包
https://www.rabbitmq.com/install-rpm.html#downloads![在这里插入图片描述](https://img-blog.csdnimg.cn/ffbc44272f3a49d09e0727e4ce5dccf4.png)
下载和安装
下载 rpm 包
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.13/rabbitmq-server-3.7.13-1.el7.noarch.rpm
安装 rpm 包
rpm -ivh rabbitmq-server-3.7.13-1.el7.noarch.rpm
启动rabbitmq服务器
设置服务,开机自动启动
chkconfig rabbitmq-server on
#启动服务
service rabbitmq-server start
#停止服务
service rabbitmq-server stop
rabbitmq管理界面
启用管理界面
开启管理界面插件
rabbitmq-plugins enable rabbitmq_management
防火墙打开 15672 管理端口
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload
重启RabbitMQ服务
systemctl restart rabbitmq-server
访问
访问服务器的15672端口,例如:http://192.168.64.140:15672添加用户
添加用户
rabbitmqctl add_user admin admin
新用户设置用户为超级管理员
rabbitmqctl set_user_tags admin administrator
设置访问权限![在这里插入图片描述](https://img-blog.csdnimg.cn/22abf9b0cf4947cc95f52a15c2e39782.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/3365df3821f049bdb7d0f8f8b934502b.png)
开放客户端连接端口
打开客户端连接端口
firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --reload
``
主要端口介绍
4369 – erlang发现口
5672 – client端通信口
15672 – 管理界面ui端口
25672 – server间内部通信口
`