1.安装RabbitMQ
centos8安装RabbitMQ链接:
centos8安装RabbitMQ_weixin_44919041的博客-CSDN博客
2. parent pom文件配置
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zhangy.springCloud</groupId>
<artifactId>zhangy-spring-cloud</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<lombok.version>1.18.22</lombok.version>
<mysql.version>8.0.28</mysql.version>
<postgresql.version>42.3.3</postgresql.version>
<mybatis.spring.boot>2.2.0</mybatis.spring.boot>
<spring-cloud.version>2021.0.1</spring-cloud.version>
<alibaba.version>2021.1</alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<!--springCloudAlibaba-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--springboot 2.6.4-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud 2021.0.1 默认负载均衡是采用loadbalancer 没有了ribbon-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.springCloud整合Eureka集群注册中心
1.版本说明
SpringBoot版本为2.6.4 SpringCloud版本2021.0.1
2.本地host文件映射
如果使用一台机器搭建集群的话,需要做映射
127.0.0.1 eureka7001.com 127.0.0.1 eureka7002.com
3. pom文件配置
<?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">
<parent>
<artifactId>zhangy-spring-cloud</artifactId>
<groupId>com.zhangy.springCloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-cloud-eureka02</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
4.yml文件配置
spring:
application:
name: cloud-eureka-server
server:
port: 7002
tomcat:
uri-encoding: UTF-8
eureka:
instance:
hostname: eureka7002.com
client:
service-url:
#注册服务地址
defaultZone: http://eureka7001.com:7001/eureka
#fasle表示不向注册中心注册自己
register-with-eureka: false
#false表示自己就是注册中心
fetch-registry: false
5.启动类
@EnableEurekaServer//eureka注册中心服务端
@SpringBootApplication
class EurekaServer02Application {
public static void main(String[] args) {
SpringApplication.run(EurekaServer02Application.class, args);
}
}
初始化一个项目,按照上述3.4.5步骤在配置一个,注意yml中的hostname和port端口号需要修改,defaultZone为相互注册的地址
端口为7001的注册中心
端口为7002的注册中心
6.启动两个注册中心
3.springCloud整合config- server配置中心
1.版本说明
SpringBoot版本为2.6.4 SpringCloud版本2021.0.1
2.初始化项目配置pom依赖
<?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">
<parent>
<artifactId>zhangy-spring-cloud</artifactId>
<groupId>com.zhangy.springCloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<description>springCloud配置服务端</description>
<artifactId>spring-cloud-config-server</artifactId>
<dependencies>
<!--消息总线bus rabbitmq依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--自定义依赖 -->
<dependency>
<groupId>com.zhangy.springCloud</groupId>
<artifactId>spring-cloud-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
3.application.yml配置
server:
port: 7003
spring:
application:
name: cloud-config-server
cloud:
config:
server:
git:
uri: https://gitee.com/zhangy_123/spring-cloud-config.git
#搜索目录
search-paths: /springCloud-config
username: gitee账号 #用户名
password: gitee密码 # 密码
#默认读取主分枝 master dev
default-label: dev #请求URL中没有指定的时候 默认读取配置的 没有配置读取主分枝master
rabbitmq:
host: mq的所在服务器的ip
port: 5672
username: admin
password: admin
eureka:
instance:
instance-id: cloud-config-server-7003
#true表示显示ip
prefer-ip-address: true
client:
#true表示向注册中心注册自己
register-with-eureka: true
#true 表示从eureka抓取信息
fetch-registry: true
service-url:
defaultZone: http://eureka7002.com:7002/eureka,http://eureka7001.com:7001/eureka
##暴露总线刷新端点
management:
endpoints:
web:
exposure:
include: 'busrefresh' #2.x的版本是 bus-refresh
4.启动类
/**
* @author: zhangyou
* @date: 2022/5/19 1:26 上午
* @description:
*/
@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer
public class SpringCloudConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudConfigServerApplication.class, args);
}
}
5.在gitee创建一个仓库并添加配置文件
gitee配置文件的内容:
config:
url: jdbc:postgresql://localhost:5432/postgres?useSSL=false
driverName: org.postgresql.Driver
userName: postgres
password: postgres
env: prod
version: 22255
6.启动项目并访问
访问地址:http://127.0.0.1:7003/config/prod/master
注:配置中心读取gitee的方式有以下几种
#读取配置规则 第一种:/{label}/{application}-{profile}.yml 分支下的文件名 /master/config-dev.yml http://127.0.0.1:7003/master/config-dev.yml表示读取master分支的config-dev.yml http://127.0.0.1:7003/dev/config-dev.yml表示读取dev分支的config-prod.yml 第二种:/{application}-{profile}.yml 默认读取master分支下的 config-dev.yml http://127.0.0.1:7003/config-dev.yml 第三种/{application}/{profile}/{label} http://127.0.0.1:7003/config/dev/master 表示读取master分支的config-dev.yml http://127.0.0.1:7003/config/prod/master表示读取master分支的config-prod.yml
4.springCloud整合config- client配置客户端
1.版本说明
SpringBoot版本为2.6.4 SpringCloud版本2021.0.1
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>zhangy-spring-cloud</artifactId>
<groupId>com.zhangy.springCloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<description>配置中心客户端1</description>
<artifactId>spring-cloud-config-client1</artifactId>
<dependencies>
<!--消息总线bus rabbitmq依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<!--读取bootstrap.yml配置-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--自定义依赖-->
<dependency>
<groupId>com.zhangy.springCloud</groupId>
<artifactId>spring-cloud-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
3.bootstrap.yml配置
server:
port: 9010
spring:
application:
name: cloud-config-client1
cloud:
config:
label: master #指定git的具体分支
name: config
profile: prod #读取后缀名为-dev.yml或-prod.yml的 master分支的config-dev.yml的配置文件 http://127.0.0.1:7003/master/config-dev.yml
uri: http://127.0.0.1:7003 #配置中心服务端地址
#读取规则 ${spring.config.uri}/{spring.config.label}/{spring.config.name}-${spring.config.profile}.yml
rabbitmq:
host: mq所在服务器的地址
port: 5672
username: admin
password: admin
eureka:
instance:
instance-id: cloud-config-client-9010
#true表示显示ip
prefer-ip-address: true
client:
#true表示向注册中心注册自己
register-with-eureka: true
#true 表示从eureka抓取信息
fetch-registry: true
service-url:
defaultZone: http://eureka7002.com:7002/eureka,http://eureka7001.com:7001/eureka
#暴露监控断点
management:
endpoints:
web:
exposure:
include: "*"
4.启动类
/**
* @author: zhangyou
* @date: 2022/5/19 2:30 上午
* @description:
*/
@SpringBootApplication
@EnableEurekaClient
public class SpringCloudConfigClientApplication1 {
public static void main(String[] args) {
SpringApplication.run(SpringCloudConfigClientApplication1.class, args);
}
}
5.获取gitee配置信息的类
package com.zhangy.springCloud.config.client.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
* @author: zhangyou
* @date: 2022/5/19 2:47 上午
* @description:
*/
@RestController
@RefreshScope
public class TestController {
//一下参数对应gitee配置文件的内容
@Value("${config.url}")
private String url;
@Value("${config.driverName}")
private String driverName;
@Value("${config.userName}")
private String userName;
@Value("${config.password}")
private String password;
@Value("${config.version}")
private String version;
@Value("${config.env}")
private String env;
@RequestMapping("/client/getConfigInfo")
public Map<String,Object> getConfigInfo(){
Map<String,Object> map = new HashMap<>();
map.put("url",url);
map.put("driverName",driverName);
map.put("userName",userName);
map.put("password",password);
map.put("version",version);
map.put("env",env);
return map;
}
}
按照上述步骤在初始化一个配置客户端项目,注意修改bootstrap.yml的端口号服务名和实例id
比如两个客户端的端口号分别为9010和9011
9010的yml配置如上所示,9011的yml配置如下
server:
port: 9011
spring:
application:
name: cloud-config-client2
cloud:
config:
label: master #指定git的具体分支
name: config
profile: prod #读取后缀名为-dev.yml或-prod.yml的 master分支的config-dev.yml的配置文件 http://127.0.0.1:7003/master/config-dev.yml
uri: http://127.0.0.1:7003 #配置中心服务端地址
#读取规则 ${spring.config.uri}/{spring.config.label}/{spring.config.name}-${spring.config.profile}.yml
rabbitmq:
host: mq所在服务器的地址
port: 5672
username: admin
password: admin
eureka:
instance:
instance-id: cloud-config-client-9011
#true表示显示ip
prefer-ip-address: true
client:
#true表示向注册中心注册自己
register-with-eureka: true
#true 表示从eureka抓取信息
fetch-registry: true
service-url:
defaultZone: http://eureka7002.com:7002/eureka,http://eureka7001.com:7001/eureka
#暴露监控断点
management:
endpoints:
web:
exposure:
include: "*"
6.启动两个客户端项目并访问
访问地址:http://127.0.0.1:9010/client/getConfigInfo http://127.0.0.1:9011/client/getConfigInfo
结果如下:
7.更改gitee配置文件内容使用消息总线bus进行广播
第一个post请求代表所有的配置客户端9010和9011都能收到gitee最新的消息
http://127.0.0.1:7003/actuator/busrefresh/
第二个post请求代表只有9011的客户端能获取最新的gitee配置信息,9010不能获取最新的
格式:http://127.0.0.1:7003/actuator/busrefresh/客户端微服务名:端口 http://127.0.0.1:7003/actuator/busrefresh/cloud-config-client2:9011