深入spring cloud(2)

服务发现之Consul实现

系列目录:

Spring Cloud的服务发现有2种实现方式,一个是Euraka服务,一个是基于Consul的服务。本文先讲讲Eureka的服务发现实现。

什么是Spring Cloud Eureka?

Spring Cloud Eureka 模块提供的功能是被动式的服务发现。 spring cloud eureka 分为两部分:

  • @@EnableDiscoveryClient: 该注解表明应用既作为eureka实例又为eureka client 可以发现注册的服务
  • @EnableEurekaServer: 该注解表明应用为eureka服务,有可以联合多个服务作为集群,对外提供服务注册以及发现功能

** 什么是服务发现?** 服务发现就像聊天室一个,每个用户来的时候去服务器上注册,这样他的好友们就能看到你,你同时也将获取好友的上线列表. 在微服务中,服务就相当于聊天室的用户,而服务注册中心就像聊天室服务器一样,目前服务发现的解决方案有Eureka , Consul ,Etcd , Zookeeper ,SmartStack ,等等。 输入图片说明 本文就来讲讲Eureka,如图所示,Eureka Client通过HTTP(或者TCP,UDP)去Eureka Server注册和获取服务列表,为了高可用一般会有多个Eureka Server组成集群。Eureka会移除那些心跳检查未到达的服务。

搭建服务注册中心: 建立Eureka Server 端

<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">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.zrx</groupId>
    <artifactId>minaret-eureka-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>minaret-eureka-server</name>
    <description>Eureka注册中心</description>

    <!-- org.springframework.booot 父类 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


    <!--  属性配置文件 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <spring.boot.admin.server>1.5.0</spring.boot.admin.server>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 服务发现 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-client</artifactId>
            <version>${spring.boot.admin.server}</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

启动应用Application.java

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

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

}

配置application.yml

server:
   port: 8761
spring:
   application:
      name: eureka-service
eureka:
  client:
    registerWithEureka: false # 禁止 注册中心,注册自己作为服务,默认是可以的
    fetchRegistry: false # 禁止 注册中心,注册自己作为服务,默认是可以的,本地是单点so,设置为false
  server:
    waitTimeInMsWhenSyncEmpty: 0
    evictionIntervalTimerInMs: 4000
  instance:
      hostname: peer1 #对应的hostname
      metadataMap:
        instanceId: ${spring.application.name}:${spring.application.instance_id:${random.value}}

注册服务提供者

建立Eureka Client 端,例如user-microservice , 这是用户服务。

<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">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.zrx</groupId>
    <artifactId>minaret-sys-provider-user</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>minaret-sys-provider-user</name>
    <description>minaret-sys-provider-user</description>

    <!-- org.springframework.booot 父类 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>

    <properties>
        <spring.boot.admin.server>1.5.0</spring.boot.admin.server>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- Euraka -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <!-- end  -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.16</version>
        </dependency>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-client</artifactId>
            <version>${spring.boot.admin.server}</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Brixton.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Application.class

@EnableDiscoveryClient
@SpringBootApplication
public class SysUserApplication {

    public static void main(String[] args) {
        new SpringApplicationBuilder(SysUserApplication.class).web(true).run(args);
    }
}
server:
  port: 3333
spring:
  application.name: user-microservice-service

# z指定注册中心的位置
eureka:
  client:
     serviceUrl:
        defaultZone: http://localhost:8761/eureka/

改造:Eruake 实现高可用注册中心

服务发现与消费

参考

https://segmentfault.com/a/1190000006149891

转载于:https://my.oschina.net/u/1187675/blog/1503157

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值