第三方服务接入注册中心
第一次分享博客,大神勿喷,请多多指教!
本篇提到的注册中心是由SpringCloud组件架构中的EurekaServer实现的,所以根据第三方服务的框架类型归纳为以下三种注册方式:
一、 SpringBoot服务:
由于SpringCloud依赖于SpringBoot,所以采用SpringBoot编写的第三方服务注册到注册中心较为简单直接,具体步骤如下:
-
在pom.xml中加入以下依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency>
-
配置application.properties/application.yml,以下是针对于application.properties的配置
#服务注册到Eureka Server上的应用名称 spring.application.name=demo-service #该配置是在Eureka Server展示应用的IP,默认则展示应用的主机名 eureka.instance.prefer-ip-address=true #Eureka Server注册服务的地址 eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
-
在启动类中添加@EnableDiscoveryClient,该注解可用于所有服务发现组件(包括Zookeeper、Consul等),而@EnableEurekaClient这个注解只用于Eureka作为服务发现组件
/** * Created by zhoushun on 2018/11/5. */ @SpringBootApplication @EnableDiscoveryClient public class DemoServApplication { public static void main(String[] args) { SpringApplication.run(DemoServApplication.class, args); } }
二、 非SpringBoot服务(属于JVM服务):
服务在启动的时候可以设置监听器,监听服务的启动并完成注册,以SpringMVC为例,具体步骤如下:
-
在pom.xml中加入以下依赖
<dependencies> <!--eureka client And java Servlet--> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>com.netflix.eureka</groupId> <artifactId>eureka-client</artifactId> <version>1.7.0</version> </dependency> <dependency> <groupId>com.netflix.archaius</groupId> <artifactId>archaius-core</artifactId> <version>0.7.4</version> </dependency> <!--slf4j日志--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <!--Spring相关的依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.13.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.13.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.3.13.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.13.RELEASE</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.3.13.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.13.RELEASE</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.10</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.10</version> </dependency> </dependencies>
-
在resources下新建配置文件config.properties,并做如下配置
#注册到Eureka Server上的服务名称 eureka.name=eurekaClientDemo1 #该服务的虚拟主机名,Eureka客户端会识别vipAddress eureka.vipAddress=test1 #Eureka Server的服务地址 eureka.serviceUrl.default=http://localhost:8761/eureka/
注:配置中并没有写入服务端口的配置,因为服务的端口取决于项目启动所依赖的Web容器的端口
-
在/WEB-INF下的web.xml中设置监听器,配置如下
-
在/WEB-INF下的dispatcher-servlet.xml加入如下配置
<mvc:annotation-driven/> <context:annotation-config/> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> <context:component-scan base-package="com.gsafety.eureka"></context:component-scan>
至此,所需要的配置已经配置完成了!
-
Java代码中主要需要写一个启动监听类,继承ServletContextListener这个类,详细代码如下
三、 非JVM服务(如node.js、python等语言编写的服务)
针对这种服务,我们是通过代理的方式注册服务,所采用的代理模式为SideCar。具体操作步骤如下:
-
首先写一个SideCar代理服务,建议使用SpringBoot进行代码编写,在SideCar-Service对应的pom.xml文件中加入以下依赖
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-netflix-sidecar</artifactId> <version>1.4.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> <version>1.4.0.RELEASE</version> </dependency> </dependencies>
-
在application.properties配置文件中加入以下配置
server.port=6003 spring.application.name=SideCar-service eureka.instance.prefer-ip-address=true eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/ #SideCar所要代理的非JVM服务的端口 sidecar.port=7001 #SideCar需要从所要代理的端口中得到非JVM服务的健康检查 sidecar.health-uri=http://localhost:7001/health.json
注:其中http://localhost:7001/health.json 的返回值是个json对象,形式如:{“status”:”UP”}。如果所接入非JVM服务不便于返回该json对象,那么可以在本服务中进行硬编码,固定这个对象。
-
在启动类中加入@EnableSidecar这个注解,具体如下:
@SpringBootApplication @EnableSidecar public class DemoServApplication { public static void main(String[] args) { SpringApplication.run(DemoServApplication.class, args); } }
综上所述:针对不同框架、不同语言编写的第三方服务进行服务注册的方式已归纳完结。