微服务之服务治理

2019-12-03  本文已影响0人  i骷髅精灵

服务治理所解决的问题

在传统rpc远程调用中,服务与服务依赖关系,管理比较复杂,所以需要使用服务治理,管理服务与服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。
在服务注册与发现中,有一个注册中心,当服务器启动的时候,会把当前自己服务器的信息 比如 服务地址通讯地址等以别名方式注册到注册中心上。
另一方(消费者|服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,让后在实现本地rpc调用远程。

服务治理所使用的技术手段

1、通过注册中心实现服务的注册与发现 ,需要一个注册中心,常用的有zookeeper、Eureka、Consul 等
2、通过本地RPC接口调用需要的服务,常用Feign客户端、RestTemplate等方式

服务发现与注册的简单技术实现

Eureka实现服务的注册与发现(springcloud整合Eureka)

pom.xml 依赖项
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <!-- springboot整合eureka客户端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <!-- springboot整合fegnin客户端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
   </dependencies>

</project>


application.yml中配置
### 服务名称(服务注册到eureka名称)
spring:
  application:
    name: app-itmayiedu-order
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8100/eureka
    ###因为该应用为注册中心,不会注册自己,集群为true
    register-with-eureka: false
    ###是否需要从eureka上获取注册信息,集群为true
    fetch-registry: false

在启动类Application上加入注解 @EnableEurekaClient
@SpringBootApplication
@EnableEurekaClient
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

然后在使用到服务是就可以使用服务器名称(application.yml中配置的应用名称代替服务地址进行服务调用)

zookeeper实现服务的注册与发现(springcloud整合zookeeper)

zookeeper的整合跟Eureka非常类似

pom.xml 依赖项
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        </dependency>
        <!--zk工具包 保持客户端zookeeper版本与服务器端一致-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

注意zookeeper指定版本是为了服务端和客户端版本保持一致,防止兼容性的问题出现

application.yml中配置
spring:
  application:
    name: app-order-service
  cloud:
    zookeeper:
      discovery:
        register: true
        enabled: true
        instance-id: 1
        root: /demo
      connect-string: 39.104.124.245:2181
在启动类Application上加入注解 @EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

然后在使用到服务是就可以使用服务器名称(application.yml中配置的应用名称代替服务地址进行服务调用)

上一篇下一篇

猜你喜欢

热点阅读