目录
spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3
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.ibm.moses</groupId>
<artifactId>spring-cloud</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>spring-cloud</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR3</spring-cloud.version>
<swagger2.version>2.9.2</swagger2.version>
<druid.version>1.1.12</druid.version>
</properties>
<modules>
<module>spring-cloud-zuul-filter</module>
<module>spring-cloud-eureka-service</module>
<module>spring-cloud-provider-1</module>
<module>spring-cloud-provider-2</module>
<module>spring-cloud-provider-3</module>
<module>spring-cloud-consul</module>
<module>spring-cloud-ribbon-consumer</module>
<module>spring-cloud-feign-consumer</module>
<module>spring-cloud-ribbon-consumer-hystrix</module>
<module>spring-cloud-feign-consumer-hystrix</module>
<module>spring-cloud-ribbon-consumer-hystrix-dashboard</module>
<module>spring-cloud-config-server</module>
<module>spring-cloud-config-client</module>
</modules>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--引入JDBC的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--引入mysql连接-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--引入web依赖,可以使用@RequestMapping,@RestController等注解-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入jpa依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger2.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger2.version}</version>
</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>
Eureka Server
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
服务注册
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
配置
eureka:
instance:
hostname: localhost
client:
fetch-registry: false
register-with-eureka: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
spring:
application:
name: eureka-service
server:
port: 8761
访问
Service Provider
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
服务注册
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
@EnableEurekaClient
@RestController
public class EurekaProviderApplication {
@Value("${server.port}")
String port;
@RequestMapping("/")
public String home() {
return "Hello world ,port:" + port;
}
public static void main(String[] args) {
SpringApplication.run(EurekaProviderApplication.class, args);
}
}
配置
spring-cloud-eureka-provider-1
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: eureka-provider
server:
port: 8081
spring-cloud-eureka-provider-2
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: eureka-provider
server:
port: 8082
spring-cloud-eureka-provider-3
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: eureka-provider
server:
port: 8083
访问
Consul 服务治理
关闭防火墙
systemctl stop firewalld.service
下载,然后unzip 解压
cd /opt/
unzip consul_1.7.3_linux_amd64.zip
cp consul /usr/local/bin/
查看版本
consul version
主机名称 | IP | 作用 | 是否允许远程访问 |
node1 | 192.168.1.101 | consul server | 是 |
node2 | 192.168.1.103 | consul client | 是 |
node3 | 192.168.1.104 | consul client | 是 |
node1启动 Consul
cd /opt/
mkdir data
consul agent -data-dir /opt/data -node=192.168.1.101 -bind=0.0.0.0 -datacenter=dc1 -ui -client=192.168.1.101 -server -bootstrap-expect 1 > /dev/null 2>&1 &
node2启动 Consul,并加入到node1节点
cd /opt/
mkdir data
consul agent -data-dir /opt/data -node=192.168.1.103 -bind=0.0.0.0 -datacenter=dc1 -ui -client=192.168.1.103 -join=192.168.1.101 > /dev/null 2>&1 &
node3启动 Consul,并加入到node1节点
cd /opt/
mkdir data
consul agent -data-dir /opt/data -node=192.168.1.104 -bind=0.0.0.0 -datacenter=dc1 -ui -client=192.168.1.104 -join=192.168.1.101 > /dev/null 2>&1 &
查看节点
http://192.168.1.101:8500/ui/dc1/nodes
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
服务注册
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDiscoveryClient
@RestController
public class ConsulApplication {
@RequestMapping("/")
public String home() {
return "Hello world";
}
public static void main(String[] args) {
SpringApplication.run(ConsulApplication.class, args);
}
}
配置
spring:
application:
name: consul-client
cloud:
consul:
host: 192.168.1.101
port: 8500
discovery:
healthCheckPath: /
healthCheckInterval: 5s
启动
nohup java -jar spring-cloud-consul-client-0.0.1-SNAPSHOT.jar > /dev/null 2>&1 &
Ribbon Consumer
添加依赖
<!-- 客户端负载均衡 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
开启服务负载均衡
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDiscoveryClient
public class RibbonConsumerApplication {
@LoadBalanced
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(RibbonConsumerApplication.class, args);
}
}
消费提供者方法
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@GetMapping(value = "/hello")
public String hello() {
return restTemplate.getForEntity("http://eureka-provider/", String.class).getBody();
}
}
添加配置
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: ribbon-consumer
server:
port: 9000
测试服务
负载均衡
Feign Consumer
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
开启Feign
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableFeignClients
@EnableDiscoveryClient
public class FeignConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(FeignConsumerApplication.class, args);
}
}
定义接口
@FeignClient("eureka-provider")
public interface HomeClient {
@GetMapping("/")
String consumer();
}
消费方法
@RestController
public class ConsumerController {
@Autowired
private HomeClient homeClient;
@GetMapping(value = "/hello")
public String hello() {
return homeClient.consumer();
}
}
配置
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: feign-consumer
server:
port: 9000
测试
负载均衡响应
断路器监控(Hystrix Dashboard)
Ribbon Hystrix
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 客户端负载均衡 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<!-- hystrix 断路器 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
服务注册
@EnableHystrix
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDiscoveryClient
public class RibbonConsumerApplication {
@LoadBalanced
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(RibbonConsumerApplication.class, args);
}
}
消费提供者方法
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "defaultStores")
@GetMapping(value = "/hello")
public String hello() {
return restTemplate.getForEntity("http://eureka-provider/", String.class).getBody();
}
public String defaultStores() {
return "Ribbon + hystrix ,提供者服务挂了";
}
}
配置
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: ribbon-consumer-hystrix
server:
port: 9000
测试断路器
停止 spring-cloud-eureka-provider-1 再次访问
http://localhost:9000/hello
Feign Hystrix
服务注册
@FeignClient(value = "eureka-provider", fallbackFactory = HystrixClientFallbackFactory.class)
public interface HomeClient {
@GetMapping("/")
String consumer();
}
HystrixClientFallbackFactory.java
@Component
public class HystrixClientFallbackFactory implements FallbackFactory<HomeClient> {
@Override
public HomeClient create(Throwable throwable) {
return () -> "Feign + hystrix ,提供者服务挂了";
}
}
配置
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: feign-consumer-hystrix
server:
port: 9000
feign:
hystrix:
enabled: true
测试断路器
停止 spring-cloud-eureka-provider-1 提供者
Hystrix Dashboard
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 客户端负载均衡 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<!-- hystrix 断路器 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<!-- Starter for using Spring Boot's Actuator which provides production ready features to help you monitor and manage your application-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- hystrix 断路器 仪表盘 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
开启 HD
@EnableHystrix
@EnableHystrixDashboard
@EnableDiscoveryClient
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class RibbonConsumerApplication {
@LoadBalanced
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(RibbonConsumerApplication.class, args);
}
}
声明断路点
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "defaultStores")
@GetMapping(value = "/hello")
public String hello() {
return restTemplate.getForEntity("http://eureka-provider/", String.class).getBody();
}
public String defaultStores() {
return "Ribbon + hystrix Dashboard ,提供者服务挂了";
}
}
配置
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: ribbon-consumer-hystrix-Dashboard
server:
port: 9000
测试服务
Hystrix Dashboard 监控
http://localhost:9000/hystrix
http://127.0.0.1:9000/hystrix.stream,2000,hello
Spring Cloud Zuul
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
开启服务注册
@EnableZuulProxy
@SpringBootApplication
public class ZuulFilterApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulFilterApplication.class, args);
}
}
添加配置
spring:
application:
name: zuul-service-filter
server:
port: 9000
zuul:
routes:
api:
path: /api1/**
serviceId: eureka-provider
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
测试服务
负载均衡
TokenFilter 过滤器
public class TokenFilter extends ZuulFilter {
private final Logger LOGGER = LoggerFactory.getLogger(TokenFilter.class);
/**
* 请求被路由之前调用
*
* @return
*/
@Override
public String filterType() {
return "pre";
}
/**
* filter执行顺序,通过数字指定 ,优先级为0,数字越大,优先级越低
*
* @return
*/
@Override
public int filterOrder() {
return 0;
}
/**
* 是否执行该过滤器,此处为true,说明需要过滤
*
* @return
*/
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
LOGGER.info("--->>> TokenFilter {},{}", request.getMethod(), request.getRequestURL().toString());
// 获取请求的参数
String token = request.getParameter("token");
if (StringUtils.isNotBlank(token)) {
//对请求进行路由
ctx.setSendZuulResponse(true);
ctx.setResponseStatusCode(200);
ctx.set("isSuccess", true);
return null;
} else {
//不对其进行路由
ctx.setSendZuulResponse(false);
ctx.setResponseStatusCode(400);
ctx.setResponseBody("token is empty");
ctx.set("isSuccess", false);
return null;
}
}
}
PasswordFilter 过滤器
public class PasswordFilter extends ZuulFilter {
private final Logger LOGGER = LoggerFactory.getLogger(TokenFilter.class);
/**
* 请求处理完成后执行的filter
*
* @return
*/
@Override
public String filterType() {
return "post";
}
/**
* filter执行顺序,通过数字指定 ,优先级为0,数字越大,优先级越低
*
* @return
*/
@Override
public int filterOrder() {
return 1;
}
/**
* 判断上一个过滤器结果为true,否则就不走下面过滤器,直接跳过后面的所有过滤器并返回 上一个过滤器不通过的结果。
*
* @return
*/
@Override
public boolean shouldFilter() {
RequestContext ctx = RequestContext.getCurrentContext();
return (boolean) ctx.get("isSuccess");
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
LOGGER.info("--->>> PasswordFilter {},{}", request.getMethod(), request.getRequestURL().toString());
String username = request.getParameter("password");
if (null != username && username.equals("123456")) {
ctx.setSendZuulResponse(true);
ctx.setResponseStatusCode(200);
ctx.set("isSuccess", true);
return null;
} else {
ctx.setSendZuulResponse(false);
ctx.setResponseStatusCode(400);
ctx.setResponseBody("The password cannot be empty");
ctx.set("isSuccess", false);
return null;
}
}
}
开启过滤器
@EnableZuulProxy
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class ZuulFilterApplication {
@Bean
public TokenFilter tokenFilter() {
return new TokenFilter();
}
@Bean
public PasswordFilter PasswordFilter() {
return new PasswordFilter();
}
public static void main(String[] args) {
SpringApplication.run(ZuulFilterApplication.class, args);
}
}
token 测试
http://localhost:9000/api1?token=token-uuid
http://localhost:9000/api1?token=token-uuid&&password=123456
Spring Cloud Config
一、Config Server
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
开启服务注册
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
添加配置
spring:
application:
name: config-server
cloud:
config:
label: master
server:
git:
uri: https://github.com/glory2018/spring-cloud-config.git #配置文件所在仓库
search-paths: spring-cloud-config #配置文件所在根目录
#私有仓库需要填写用户名密码,公开仓库不需要
# username: github 登录账号
# password: github 登录密码
# default-label: master #配置文件分支
server:
port: 8888
content=hello dev
content=hello test
content=hello prod
测试服务
http://localhost:8888/springCloudConfig/dev/master
二、Config Client
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
开启服务注册
@RestController
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class ConfigClientApplication {
@Value("${content}")
String content;
@RequestMapping("/")
public String home() {
return "content:" + content;
}
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
}
添加配置
spring:
application:
name: config-client
cloud:
config:
label: master
profile: dev
uri: http://localhost:8888 #通过域名访问配置中心服务端
# fail-fast: true
# discovery:
# enabled: true
server:
port: 8088
测试服务
三、集成 Eureka
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
开启服务注册
@EnableEurekaClient
@EnableConfigServer
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
配置
spring:
application:
name: config-server
cloud:
config:
label: master
server:
git:
uri: https://github.com/glory2018/spring-cloud-config.git #配置文件所在仓库
search-paths: spring-cloud-config #配置文件所在根目录
#私有仓库需要填写用户名密码,公开仓库不需要
# username: github 登录账号
# password: github 登录密码
# default-label: master #配置文件分支
server:
port: 8888
eureka:
# instance:
# hostname: eureka1.client.com
# lease-renewal-interval-in-seconds: 5
# lease-expiration-duration-in-seconds: 10
client:
service-url:
defaultZone: http://localhost:8761/eureka/
测试服务
http://localhost:8888/springCloudConfig/dev/master
四、Config Client Eureka
spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
<!-- actuator 监控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
开启服务注册
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableEurekaClient
@RestController
public class EurekaProviderApplication {
@Value("${content}")
String content;
@Value("${server.port}")
String port;
@RequestMapping("/")
public String home() {
return "Hello world ,port:" + port + ",content=" + content;
}
public static void main(String[] args) {
SpringApplication.run(EurekaProviderApplication.class, args);
}
}
添加配置
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: eureka-provider
cloud:
config:
label: master
profile: dev
# uri: http://localhost:8888
discovery:
enabled: true #从配置中心读取文件
service-id: config-server #通过服务名称去Eureka注册中心找服务
server:
port: 8081
测试服务
spring-cloud-eureka-service
spring-cloud-config-server
spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3
spring-cloud-feign-consumer
Spring Cloud Bus集成RabbitMQ
一、Config Server
spring-cloud-config-server
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
添加配置
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: config-server
cloud:
config:
label: master
server:
git:
uri: https://github.com/glory2018/spring-cloud-config.git #配置文件所在仓库
search-paths: spring-cloud-config #配置文件所在根目录
#私有仓库需要填写用户名密码,公开仓库不需要
# username: github 登录账号
# password: github 登录密码
# default-label: master #配置文件分支
rabbitmq:
host: 192.168.1.102
port: 5672
username: moses
password: 123456
server:
port: 8888
二、Config Client
spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
添加配置
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: eureka-provider
cloud:
config:
label: master
profile: dev
# uri: http://localhost:8888
discovery:
enabled: true #从配置中心读取文件
service-id: config-server #通过服务名称去Eureka注册中心找服务
rabbitmq:
host: 192.168.1.102
port: 5672
username: moses
password: 123456
测试服务
启动RabbitMQ
启动项目
spring-cloud-eureka-service
spring-cloud-config-server
spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3
spring-cloud-feign-consumer
http://localhost:15672/#/queues
http://localhost:8888/springCloudConfig/dev/master
修改配置