简述
三大角色
- Eureka Server:提供服务的注册与发现
- Service Provider:服务生产方,将自身服务注册到Eureka中,从而使服务消费方能狗找到
- Service Consumer:服务消费方,从Eureka中获取注册服务列表,从而找到消费服务
设计图:
整合的编码套路:
1、导入依赖
2、编写yml配置文件
3、在启动类上启动服务,@EnableXXX
4、编写配置类
一、注册中心
1、导入依赖
<!--导包~-->
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->
<!--导入Eureka Server依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
</dependencies>
2、编写yml配置文件
server:
port: 7001
eureka:
instance:
a-s-g-name: localhost #可以写127.0.0.1
client:
register-with-eureka: false # 表示是否向 Eureka 注册中心注册自己(这个模块本身是服务器,所以不需要)
fetch-registry: false # fetch-registry如果为false,则表示自己为注册中心,客户端的化为 ture
service-url:
defaultZone: http://${eureka.instance.a-s-g-name}:${server.port}/eureka/ #服务注册地址3、在启动类上启动服务,@EnableXXX
@SpringBootApplication
@EnableEurekaServer //服务端的启动类,可以接受别人注册进来~
public class EurekaService_7001 {
public static void main(String[] args) {
SpringApplication.run(EurekaService_7001.class,args);
}
}
4、启动服务即可。
访问http://localhost:7001/ ,进入Eureka的管理界面

现在还没有服务注册进来。
二、服务提供者provider
1、导入依赖
<!--Eureka依赖-->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>2、编写yml配置文件
server:
port: 8001
spring:
application:
name: spring-cloud-provider #设置服务名。
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka/ #注册中心的注册地址
instance:
instance-id: springcloud-provider-dept-8001 #修改Eureka上的默认描述信息
3、在启动类上启动服务,@EnableXXX
@SpringBootApplication
@EnableEurekaClient //开启Eureka客户端注解,在服务启动后自动向注册中心注册服务
@EnableDiscoveryClient //开启服务发现客户端的注解,可以用来获取一些配置的信息,得到具体的微服务
public class Provider_8001 {
public static void main(String[] args) {
SpringApplication.run(Provider_8001.class,args);
}
}4、编写一些Controller测试接口即可
5、启动服务
先启动EurekaService服务端,后启动Provider客户端,然后访问监控页http://localhost:7001/ 产看结果如图,

扩展: 【配置关于服务加载的监控信息】
1、添加pom依赖
<!--actuator完善监控信息-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>2、之后可以在yml文件中添加
info:
app.name: haier
company.name: 青岛海尔
3、之后再Eureka管理界面点击服务,会返回上面添加的数据信息【json格式】
扩展二、注册进去的微服务,获取一些消息(团队开发会用到)
Controller新增获取服务信息的方法
@GetMapping("/discovery")
public Object discovery(){
// 获取微服务列表的清单
List<String> services = client.getServices();
System.out.println("获得client.getServices():"+services);
// 得到一个具体的微服务信息,通过具体的微服务id,Eureka中的Application
List<ServiceInstance> instances = client.getInstances("SPRING-CLOUD-PROVIDER");
for (ServiceInstance instance : instances) {
System.out.println("主机名称:"+instance.getHost());
System.out.println("端口号:"+instance.getPort());
System.out.println("URL:"+instance.getUri());
System.out.println("服务id:"+instance.getServiceId());
}
return null;
}
三、服务消费者Consummer【整合Ribbon】
1、导入依赖
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-ribbon -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>2、编写yml配置文件
server:
port: 8080
eureka:
client:
register-with-eureka: false # 不向 Eureka注册自己
service-url:
defaultZone: http://localhost:7001/eureka/ #从Eureka获取服务地址3、在启动类上启动服务,@EnableXXX
//Ribbon 和 Eureka 整合以后,客户端可以直接调用,不用关心IP地址和端口号
@EnableEurekaClient//开启Eureka 客户端
@SpringBootApplication
public class Consumer_8080 {
public static void main(String[] args) {
SpringApplication.run(Consumer_8080.class,args);
}
}4、编写配置类
@Configuration
public class ConfigBean {//@Configuration -- spring applicationContext.xml
/**
* IRule:
* RoundRobinRule 轮询策略
* RandomRule 随机策略
* AvailabilityFilteringRule : 会先过滤掉,跳闸,访问故障的服务~,对剩下的进行轮询~
* RetryRule : 会先按照轮询获取服务~,如果服务获取失败,则会在指定的时间内进行,重试
*/
@Bean
@LoadBalanced //配置负载均衡实现RestTemplate
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
//默认轮询策略,这个Bean可以不要
@Bean
public IRule myRule() {
return new RandomRule();//使用随机策略
//return new RoundRobinRule();//使用轮询策略
//return new AvailabilityFilteringRule();//使用轮询策略
//return new RetryRule();//使用轮询策略
}
}
5、编写测试Controller,访问Eureke中心注册的Provider服务
@RestController
public class MyController {
@Autowired
private RestTemplate restTemplate;//我使用配置类注册Bean了,如果没有,直接new
//Ribbon:我们这里的地址,应该是一个变量,通过服务名来访问
//private static final String REST_URL_PREFIX = "http://localhost:8001";
private static final String REST_URL_PREFIX = "http://SPRING-CLOUD-PROVIDER";
@GetMapping("/getUser")
public List<User> getUser(){
System.out.println("getUser成功=========");
return restTemplate.getForObject(REST_URL_PREFIX+"/user/getAllUser", List.class);
}
}启动后,直接访问这个接口即可。
【扩展】:可以自己配置Ribbon访问策略
版权声明:本文为qq_44507798原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。