【微服务学习1--组件】服务注册中心--Eureka

发布时间 2023-07-13 08:36:24作者: 强仔123
一、简介:
 
    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测试启动:
        访问:http://localhost:9100

 

创建服务成功。
访问: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:9100

   访问: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

  访问即可。