因为工作需要,写了这个东东。我自己也才了解不久,有可能有错误的地方,请大家给以指正。
要介绍eureka、我们先说说之前我们使用的分布式接口工具、ejb或者webservice 。ejb因为其内网的传输效率高而被广泛应用。webservice因为使用的是http协议且可以进行加密传输也被广泛应用。随着互联网的发展,ejb和webservice的在集群化的短板尤显突出。虽然也有一些集群化方案解决、如webservice可以使用方向代理进行分流,但是开发起来的效果不是很好。如filter过滤等等。
eureka弥补了以上的问题、且在开发速度上有较大的提交。它能像ejb那样直接调用server的接口,且在集群分配上能够动态设置。以webservice为例:他类似在webservice的server和client中间加了一个服务器。所有的eureka在server端代码在启动的时候先将自己的服务注册到eureka,客户端在启动时向eurka寻找自己的服务,寻找到后由eurka将客户端的请求转发给server执行后返回给client。
以下代码以springboot项目为例创建eureka项目。在springboot中的eureka的包文件中已经包含了eureka的服务器,因此我们不需要进行eureka的服务器安装。
1、首先我们到http://start.spring.io/下载项目maven的demo 。要求包文件包含web包。下载后我们导入demo工程。
<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>spring.cloud</groupId> <artifactId>spring-boot-cloud</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <spring.version>4.2.4.RELEASE</spring.version> <spring-boot.version>1.3.1.RELEASE</spring-boot.version> <platform-bom.version>2.0.1.RELEASE</platform-bom.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-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</groupId> <artifactId>spring-framework-bom</artifactId> <version>${spring.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>io.spring.platform</groupId> <artifactId>platform-bom</artifactId> <version>${platform-bom.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Angel.SR4</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
package org.mvnsearch.boot.registry.server; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class CloudRegistryServerApplication { public static void main(String[] args) { SpringApplication.run(CloudRegistryServerApplication.class,args); } }
在resources目录下添加application.yml
spring: application: name: eureka server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false server: waitTimeInMsWhenSyncEmpty: 0
这样我们运行main后,@EnableEurekaServer就将服务注册到了Eureka.我们可以通过http://localhost:8761/eureka能查看注册的情况。这仅仅是个服务端程序。客户端的代码类似。添加@EnableEurekaClient即可
----------------------
服务端可以优化为以下代码、所有的服务端都可以自动注册
1、application.properties
eureka.instance.preferIpAddress=true eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
2、pom加入
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.0.4.RELEASE</version> </dependency>
------------------------------------------------------------------------------------------------------------------------------------------
客户端:现在我们也可以不用直接注册到eureka,可以通过zull的方式注册。配置如下:
#自己的web端口 我们通过http://localhost:1111访问自己 server: port: 1111 management: port: 1110 #自己的引用名称,注册到eureka也会是这个名称 spring: application: name: xxx-web-server #eureka服务配置 eureka: instance: prefer-ip-address: true client: service-url: defaultZone: http://localhost:8761/eureka/ #这里的zull承担了路由的功能,所有http://localhost/order/**的链接都会被路由到ytx-sea#rch-server的eureka服务上,eureka也可就在项目中jar包一起存在,随着java的启动一起运行。 zuul: routes: users: path: /order/** serviceId: ytx-search-server stripPrefix: true
java代码
@SpringBootApplication @EnableZuulProxy //zuul作为eureka的代理服务器,监管eureka服务费 @EnableDiscoveryClient //eureka会去自动扫描,将注册到eureka的服务自动加载进来 @EnableFeignClients public class XXXServerApplication { public static void main(String[] args) { SpringApplication.run(XXXServerApplication.class, args); } }
controller代码
@RestController @RequestMapping("/xxx") public class XXXCodeController { @Autowired private XXXservice XXXservice; //这里的xxxservice如果是服务端实现的程序,我们可以直接调用 }
http://cloud.51cto.com/art/201505/477946_all.htm