服务治理Eureka

* fetch : 拿来
* perfer : 先拿来
* preservation : 保护
* eviction : 驱逐
* interval : 间隔
* lease : 租用
* expiration : 到期
* duration : 期间
* renewal : 更新

ps :

一 : 什么是服务治理

  • 微服务架构的缺点中最主要的就是由于微服务数量众多导致维护成本巨大,服务治理就是为解决这个问题而产生的
  • 服务治理的作用是让维护人员从人工维护中解放出来,由服务自维护,微服务作为服务提供方主动向服务治理中心注册,服务的消费方通过服务治理中心查询需要的服务并进行调用
  • 服务治理在微服务技术架构中处于核心位置,不只是微服务,还要和服务网关,监控保护等进行通信,因为在服务治理中心中,记录了所有的微服务,其他的项目想要管理微服务,都要通过治理中心查询这些微服务

二 : SpringCloudEureka

  • SpringCloudEureka是对NetFlix公司的Eureka的二次封装,它实现了服务治理的功能,SpringCloudEureka提供服务端和客户端,服务端就是服务注册中心,客户端完成服务的注册与发现,服务端和客户端均采用java语言编写(Eureka支持多语言)

三 : 架构

17149157-e2ae05f039d83c8f.png
  • 盗了张图,方便理解

四 : 快速入门

  • 将用户登陆服务注册到Eureka中

(一) 编写eureka项目

1.添加eureka

  • 新建springboot工程,勾选eureka
17149157-c1249383b4538746.png
  • 如果是maven工程,则添加如下依赖
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.5.RELEASE</version>
</parent>
<properties>
    <java.version>1.8</java.version>
    <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </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>
  • 这里有个问题需要说明一下,我刚开始用的是jdk12,结果启动会报错
java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext not present
  • 这是因为JAXB-APIjava ee的一部分,在jdk9以上的版本中没有在默认的类路径中,java ee api在jdk中还是存在的,默认没有加载而已,jdk9中引入了模块的概念,可以使用模块命令--add-modules java.xml.bind引入jaxb-api
  • 使用jdk8没有问题

2.启动类上添加注解

@EnableEurekaServer
@SpringBootApplication
public class MicroserviceEurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(MicroserviceEurekaApplication.class, args);
    }

}

3.编写配置文件

  • application.yml
server:
  port: ${port}
spring:
  application:
    name: microservice-eureka # 指定服务名
eureka:
  client:
    register-with-eureka: true # 是否将自己注册到Eureka服务中
    fetch-registry: true # 是否从Eureka中获取注册信息
    service-url: # Eureka客户端与服务端进行交互的地址
      defaultZone: ${eureka.server}
  instance:
    prefer-ip-address: true # 将自己的ip地址注册到Eureka中
    ip-address: 127.0.0.1
    instance-id: ${spring.application.name}:${server.port} # 指定实例id
  server:
    enable-self-preservation: false # 自我保护
    eviction-interval-timer-in-ms: 60000 # 清理时间间隔(单位毫秒,默认是60*1000)

(二) 编写登陆服务

1.添加eureka和web组件

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2.编写登陆功能

@RestController
public class UserController {

    @GetMapping("/user/{username}")
    public Map<String,Object> login(@PathVariable String username){

        if("jim".equals(username)){
            return new HashMap<String,Object>(){{
                put("username", "jim");
                put("age", "22");
            }};
        }else if ("tom".equals(username)){
            return new HashMap<String,Object>(){{
                put("username", "tom");
                put("age", "18");
            }};
        }

        return new HashMap<String,Object>(){{
            put("msg", "用户名错误");
            put("success", false);
        }};
    }
}

3.编写配置文件

server:
  port: ${port}

spring:
  application:
    name: microservice-user

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://127.0.0.1:6868/eureka/,http://127.0.0.1:6869/eureka/
    eureka-server-connect-timeout-seconds: 60
    eureka-server-read-timeout-seconds: 60
  instance:
    prefer-ip-address: true
    ip-address: 127.0.0.1
    instance-id: ${spring.application.name}:${server.port}
    lease-expiration-duration-in-seconds: 30
    lease-renewal-interval-in-seconds: 10

(三) 启动服务

1.启动eureka

  • spring-boot:run -Dport=6868 -Deureka.server=http://localhost:6869/eureka
  • spring-boot:run -Dport=6869 -Deureka.server=http://localhost:6868/eureka

2.启动login

  • spring-boot:run -Dport=8281
  • spring-boot:run -Dport=8282

3.浏览器访问

  • http://localhost:6868/
  • http://localhost:6869/
17149157-fa68c9f215964cc5.png

转载于:https://www.jianshu.com/p/7f81c0c6fe52

猜你喜欢

转载自blog.csdn.net/weixin_34121282/article/details/91213789