Spring cloud eureka是用来实现服务的注册和发现;既包含了服务端组件也包含了客户端组件。
Eureka的服务端也成为服务注册中心,支持高可用配置,Eureka客户端主要处理服务的注册与发现,Eureka的客户端向注册中心注册自身提供的服务并周期性的发送心跳来更新它的服务,也能从服务端查询当前注册的服务信息并把它们缓存到本地并周期性地刷新服务状态。
本篇文章主要分为以下几个方面:
1、注册中心搭建
2、服务注册
3、高可用注册中心
4、消费服务
一、注册中心搭建:
使用IDEA创建一个springboot项目,勾选eureka server:
在主类中添加注解@EnableEurekaServer,启动一个服务注册中心,供其他应用进行对话
@EnableEurekaServer
@SpringBootApplication
public class Eurekaserver1Application {
public static void main(String[] args) {
SpringApplication.run(Eurekaserver1Application.class, args);
}
}
在配置文件添加:
server.port=8088
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url..defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
默认情况下服务注册中心会将自己作为客户端来尝试注册他自己。
eureka.client.register-with-eureka:false:不向注册中心注册自己
eureka.client.fetch-registry:false:由于注册中心的职责是维护实例,并不需要去检索服务,所以设置成false。
二、注册服务提供者:
新创建一个springboot项目,勾选Eureka Discovery:
新建一个controller:
@RequestMapping(value = "/")
@RestController
public class HelloController {
@RequestMapping(value = "hello")
public String hello(){
return "hello world";
}
}
在application上添加注解:@EnableDiscoveryCilent
@EnableDiscoveryClient
@SpringBootApplication
public class Helloserver1Application {
public static void main(String[] args) {
SpringApplication.run(Helloserver1Application.class, args);
}
}
配置文件:
server.port=8090
spring.application.name=helloservice-1
eureka.client.service-url.defaultZone=http://localhost:8088/eureka
指定了服务注册中心
然后启动项目,访问注册中心,就会看到服务以及注册到注册中心了。
三、高可用服务注册中心
在微服务架构的分布式环境下,我们必须要考虑发生故障的情况,所以在生成环境中必须对各个组件进行高可用部署,接下来我们进行注册中心的高可用,构建一个双节点的服务注册中心;
改造之前的服务注册中心,修改配置文件内容:
server.port=8088
spring.application.name=server-1
eureka.instance.hostname=server-1
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url..defaultZone=http://server-2:8089/eureka/
在新建一个springboot项目 作为eureka server,配置文件如下:
server.port=8089
eureka.instance.hostname=server-2
spring.application.name=server-2
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://server-1:8088/eureka/
访问注册中心2:
访问注册中心1:
高可用搭建完成。
四、消费服务(Ribbon)
新建一个springboot项目,勾选 Eureka Discovery和 Ribbon
在主类中添加注解、引入RestTempate
@EnableDiscoveryClient
@SpringBootApplication
public class RibbonApplication {
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(RibbonApplication.class, args);
}
}
配置文件:
server.port=8091
spring.application.name=ribbon-consumer
eureka.client.service-url.defaultZone=http://server-2:8089/eureka/
eureka.client.service-url.defaultZone 指定 注册1、2都可以。
启动项目,再查看注册中心:
多了一个RIBBON-CONSUER服务,说明已经成功注册到注册中心;现在开始消费服务HELLOSERVICE-1
新建一个controller:
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value = "/consumer")
public String getvalue(){
return restTemplate.getForEntity("http://HELLOSERVICE-1/hello",String.class).getBody();
}
}
启动项目,访问localhost:8091/consumer,
消费服务成功,Ribbon是客户端负载均衡,我们为了验证,再新建一个HELLOSERVICE,和上面的HELOSERVICE只是端口不一样。
server.port=8093
spring.application.name=helloservice-1
eureka.client.service-url.defaultZone=http://localhost:8088/eureka
只是端口号从8090变成了8093
启动项目,查看注册中心:
HELLOSERVICE-1 启动了两个实例,只是端口不一样,现在我们再通过consumer来消费服务,多访问几次,可以看到,两个不同端口的服务交替响应:
实现了客户端的负载均衡。
关于服务治理和Ribbon的其他内容我们后续再详细讲解。。。。。