【微服务学习1--组件】服务注册中心--Eureka
一、简介:
Eureka是由Netflix公司开源的一款提供服务注册和发现的产品。因此,在添加依赖时,会有NetFlix。
该组件管理各种的服务功能:注册、 发现、熔断、负载、降级等。
Eureka采用的是基于C/S的设计架构。
Eureka由两部分组成(Server/Client):Eureka服务器和Eureka客户端。其中服务器可以用作服务注册服务器。而客户端是一个Java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。
由上图我们可以简单的看到Eureka组件的架构图,主要由三部分组成:
Eureka Server:提供服务注册和发现
Service Provider:服务提供方、将自身服务注册到Eureka,从而使消费者可以找到
Service Consumer: 服务消费方 从Eureka获取注册服务列表,从而能够消费服务。
下面演示入门案例
第一个案例:
1.创建module:注意创建的方式为:Spring Initializr创建springBoot项目(快速入门创建,也可以使用maven格式)
可以通过官网下载,也可以通过自定义的路径(阿里云https://start.aliyun.com)下载
Group:可以是组织域名的倒写
Artifact:项目名称
Type:我们选择使用maven项目
Lanagure:选用Java语言进行开发
Packaging:打包方式,可以是jar包也可以是war包
Java Version:Java版本
注意此时的项目中的报名需要修改
点击next--选择需要添加的依赖,首先是WEb-->spring web --> spring cloud discovery-->Eureka-->Eureka Server
中间右上角的SpringBoot版本号选择合适的,我选择的是2.7.13(之后还会修改)
2.修改src-->main-->resources-->application.properties:
server.port=9100
spring.application.name=eureka-server
#设置注册中心得地址
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.service-url.defaultZone=http://127.0.0.1:9100/eureka
3.修改启动类Application.java
@SpringBootApplication
@EnableEurekaServer//启用Eureka
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
添加注解开启Eureka服务
此时便可以运行,访问http://localhost:9100得到结果如下图:
4.以相同的步骤创建服务提供者 spring-cloudeureka-provider的module
但在选择依赖时的点击next--选择需要添加的依赖,首先是WEb-->spring web spring cloud discovery-->Eureka Discovery Client
4.1修改pom文件,修改版本:
4.2 修改配置文件:
server.port=8083
#应用名 之后也会是注册的服务名
spring.application.name=eureka-provider
#注册服务的地址
server.servlet.context-path=/02-spring-cloud-provider
#配置注册中心地址 此时为客户端
eureka.client.service-url.defaultZone=http://localhost:9100/eureka
4.3创建控制器,模拟接收
@RestController
public class TestController {
@RequestMapping("/test")
public String test(){
return "这是demo2得provider 端口号是8083";
}
}
4.4修改启动类,添加注解,允许启动、
@SpringBootApplication
@EnableEurekaClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4.5测试启动:
创建服务成功。
访问:localhost:8083/02-spring-cloud-provider/test 也可以正常显示
5.创建消费者module:spring-cloud-eureka-consumer:
5.1与provider创建类型相同。
5.2修改pom文件
5.3修改配置文件:
#端口号
server.port=8084
spring.application.name=server-consumer
server.servlet.context-path=/02-spring-cloud-consumer
#配置注册中心地址
eureka.client.service-url.defaultZone=http://localhost:9100/eureka
5.4添加config.RestTemplateConfig类:
RestTemplate主要是说明spring支持的Http请求,符合restful风格的,他可以接收常见的Rest请求方法的模板。
使用该模板,我们能就可以访问到其请求体信息。
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
5.5添加controller.TestController控制器来测试:
@RestController
public class TestController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/test")
public String test(){
ResponseEntity<String> result=restTemplate.getForEntity("http://SERVER-PROVIDER/test",String.class);
return result.getBody();
}
}
5.6修改启动类:
@SpringBootApplication
@EnableEurekaClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
5.7启动:
5.8测试:
访问:http://localhost:8084/test
第二个案例:集群:
在分布式系统中通常需要多台server来进行服务的注册,这样才能保证在大容量下可以进行正常的服务。在第一个案例的基础上继续进行展示:
6,创建server 端口号为9200,
使用集群可能需要修改系统的配置文件:C:\Windows\System32\drivers\etc\host
6.1修改9100的配置文件(也就是第一个案例中的Server)
server.port=9100
eureka.instance.hostname=eureka9100
eureka.client.fetch-registry=false
eureka.client.register-with-eureka=false
eureka.client.service-url.defaultZone=http://eureka9200:9200/eureka
#禁用自我保护机制
# eureka.server.enable-self-preservation=false
6.2创建9200的module
修改其配置文件:
server.port=9200
eureka.instance.hostname=eureka9200
eureka.client.fetch-registry=false
eureka.client.register-with-eureka=false
eureka.client.service-url.defaultZone=http://eureka9100:9100/eureka
访问即可。