Spring Cloud Eureka 入门 (二)服务提供者详解

2021-12-17 09:13:57 浏览数 (1)

优秀不是过去是一种心态。

本文提纲

1. springcloud-eureka-sample 工程结构 2. 运行 springcloud-eureka-client-provider 服务提供者工程 3. 详解 springcloud-eureka-client-provider 服务提供者工程

「Spring Cloud Eureka 入门系列」 Spring Cloud Eureka 入门 (一)服务注册中心详解 Spring Cloud Eureka 入门 (二)服务提供者详解 Spring Cloud Eureka 入门 (三)服务消费者详解

一、工程介绍

接着上一小节《Spring Cloud Eureka 入门 (一)服务注册中心详解》,我们成功运行了 Spring Cloud Eureka Server 工程作为服务注册中心工程。这小节,我们写一个作为客户端的服务提供者工程,服务提供者向服务中心注册或者下线服务实例。即图中的右侧 1 ,2 流程:

springcloud-eureka-sample 工程结构

代码语言:javascript复制
├── springcloud-eureka-client-customer
├── springcloud-eureka-client-provider
└── springcloud-eureka-server

上面依次是 服务消费者工程、服务提供者工程和服务注册中心工程。

二、运行工程

运行 springcloud-eureka-client-provider 服务提供者工程 运行环境:JDK 7 或 8,Maven 3.0 技术栈:Spring Cloud Dalston.SR1、 spring-cloud-netflix 1.3.1、Spring Boot 1.5.4 自然,我们先得去上一小节《Spring Cloud Eureka 入门 (一)服务注册中心详解》 ,把注册中心工程启动完毕。 1. git clone 下载工程 springcloud-learning-example 项目地址见 GitHub - https://github.com/JeffLi1993/ ... ample:

代码语言:javascript复制
git clone https://github.com/JeffLi1993/ ... e.git

2. Maven 编译安装这个工程:

代码语言:javascript复制
cd springcloud-learning-example
mvn clean install

3. 运行 Eureka 工程 springcloud-eureka-client-provider 启动 springcloud-eureka-client-provider 工程启动类 ProviderApplication,启动服务注册中心工程。 EurekaServerApplication 类路径:/springcloud-learning-example/springcloud-eureka-sample/springcloud-eureka-client-provider/src/main/java/org/spring/springcloud/ProviderApplication.java 控制台 Console 看到这类信息,代表启动成功:

代码语言:javascript复制
2017-07-10 16:03:15.075  INFO 11020 --- [           main] o.s.c.n.e.s.EurekaServiceRegistry        : Registering application provider-service with eureka with status UP2017-07-10 16:03:15.075  INFO 11020 --- [           main] com.netflix.discovery.DiscoveryClient    : Saw local status change event StatusChangeEvent [timestamp=1499673795075, current=UP, previous=STARTING]2017-07-10 16:03:15.079  INFO 11020 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_PROVIDER-SERVICE/10.18.29.31:provider-service:8080: registering service...2017-07-10 16:03:15.126  INFO 11020 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_PROVIDER-SERVICE/10.18.29.31:provider-service:8080 - registration status: 2042017-07-10 16:03:15.183  INFO 11020 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)2017-07-10 16:03:15.185  INFO 11020 --- [           main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 80802017-07-10 16:03:15.191  INFO 11020 --- [           main] o.s.springcloud.ProviderApplication      : Started ProviderApplication in 9.809 seconds (JVM running for 10.981)

可以看出,注册了应用名为 provider-service 的应用,该服务提供者的工程端口为 8080 4. 访问 Eureka 注册中心可视化界面 打开浏览器,访问 http://localhost:8888/ ,如图所示:

可以看到,服务提供者向服务注册中心注册自己的实例,展示了应用名和端口信息等。

三、工程代码详解

详解 springcloud-eureka-client-provider 服务提供者工程 1.springcloud-eureka-server 工程目录结构

代码语言:javascript复制
├── pom.xml└── src
   └── main
       ├── java
       │   └── org
       │       └── spring
       │           ├── springcloud
       │           │    └──  ProviderApplication.java
       │           └── web
       │                └──  ProviderController.java
       └── resources
           └── application.yml

ProviderApplication.java Eureka Client 启动类,启动服务提供者工程 ProviderApplication.java Provider HelloWorld 案例 application.yml 配置文件 2. pom.xml 配置

代码语言:javascript复制
<?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/ma ... gt;
   <modelVersion>4.0.0</modelVersion>    <groupId>springcloud</groupId>    <artifactId>springcloud-eureka-client-provider</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>springcloud-eureka-client-provider :: 服务提供者</name>    <!-- Spring Boot 启动父依赖 -->
   <parent>
       <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.4.RELEASE</version>    </parent>
   <dependencies>
       <!-- Spring Cloud Netflix Eureka Client 依赖 -->
       <dependency>
           <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-eureka</artifactId>        </dependency>
       <!-- Spring Boot Test 依赖 -->
       <dependency>
           <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>
   </dependencies>
   <dependencyManagement>
       <dependencies>
           <!-- Spring Cloud Netflix 依赖 -->
           <dependency>
               <groupId>org.springframework.cloud</groupId>                <artifactId>spring-cloud-netflix</artifactId>                <version>1.3.1.RELEASE</version>                <type>pom</type>                <scope>import</scope>            </dependency>
       </dependencies>
   </dependencyManagement>
   <build>
       <plugins>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-compiler-plugin</artifactId>                <configuration>
                   <source>1.8</source>                    <target>1.8</target>                </configuration>
           </plugin>
       </plugins>
   </build></project>

使用的依赖是 - spring-cloud-netflix 1.3.1 是 Spring Cloud Dalston.SR1 版本。 - spring-cloud-starter-eureka Eureka Client 模块依赖,包含了客户端 client 的依赖,还有 Ribbon 的依赖,如:org.springframework.cloud:spring-cloud-netflix-eureka-client:1.3.1.RELEASE org.springframework.cloud:spring-cloud-starter-ribbon:1.3.1.RELEASE 3. application.yml 配置

代码语言:javascript复制
server:
 port: 8080 # 服务端口eureka:
 client:
   service-url:
     defaultZone: http://localhost:8888/eureka/ # 服务注册中心地址spring:
 application:
   name: provider-service # 服务名称

- server.port 设置工程服务端口 - eureka.client.service-url.defaultZone 设置服务注册中心地址 4.注册中心应用启动类

代码语言:javascript复制
/**
* Spring Boot Eureka Server 应用启动类
*
* Created by bysocket on 21/06/17.
*/@EnableEurekaClient     // Eureka Client 标识@SpringBootApplication  // Spring Boot 应用标识public class ProviderApplication {    public static void main(String args) {        // 程序启动入口
       // 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件
       SpringApplication.run(ProviderApplication.class,args);
   }
}

@EnableEurekaClient 标志该应用作为 Eureka Client ,并会自动化读取 Eureka 相关配置。 6.服务提供者 Hello World 案例

代码语言:javascript复制
/**
* Provider HelloWorld 案例
* <p>
* Created by bysocket on 06/22/17.
*/@RestControllerpublic class ProviderController {    private static final Logger LOGGER = LoggerFactory.getLogger(ProviderController.class);
   @Autowired    private Registration registration;       // 服务注册
   @Autowired    private DiscoveryClient discoveryClient; // 服务发现客户端
   @RequestMapping("/provider")    public String provider() {
       ServiceInstance instance = serviceInstance();
       LOGGER.info("provider service, host = "   instance.getHost()
                 ", service_id = "   instance.getServiceId());        return "Hello,Provider!";
   }    /**
    * 获取当前服务的服务实例
    *
    * @return ServiceInstance
    */
   public ServiceInstance serviceInstance() {        List<ServiceInstance> list = discoveryClient.getInstances(registration.getServiceId());        if (list != null && list.size() > 0) {            return list.get(0);
       }        return null;
   }
}

可以看到注入了 Registration 和 DiscoveryClient 两个对象:

代码语言:javascript复制
- Registration 服务注册接口,包含了获取服务 ID 的方法。
- DiscoveryClient 服务发现客户端,具有以下方法:
     - String description(); 获取描述
     - ServiceInstance getLocalServiceInstance(); @Deprecated 方法被删除,推荐不要使用。获取本地服务实例
     - List<ServiceInstance> getInstances(String serviceId);  通过服务 ID,获取当前服务的服务实例
     - List<String> getServices(); 获取所有服务 ID 列表

四、小结 此小章节介绍了如何 Eureka 作为服务提供者,并向服务注册中心注册自己实例。 下一小结讲下 服务消费者详解 具体是如何向服务注册中心注册自己,发现其他服务,并调用其他服务的。系列目录如下: Spring Cloud Eureka 入门 (一)服务注册中心详解 Spring Cloud Eureka 入门 (二)服务提供者详解 Spring Cloud Eureka 入门 (三)服务消费者详解 资料: 1.《Spring Cloud微服务实战》 2. 官方文档 http://cloud.spring.io/spring- ... EASE/

0 人点赞