本篇主要介紹Spring Cloud Netflix的組件配置,包括Eurek,F(xiàn)egin等。
我們都知道Spring Cloud的服務(wù)發(fā)現(xiàn)一個(gè)三個(gè)角色(詳細(xì)請(qǐng)見(jiàn)服務(wù)發(fā)現(xiàn)),如下圖
接下來(lái)我們按照這三個(gè)角色來(lái)介紹Netflix的組件配置(本篇介紹的配置基于Spring Boot 1.4.4.RELEASE版本)。
1、Eureka Server配置
新加一個(gè)Spring Boot工程,在pom文件中加入以下依賴(lài)
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Brixton.SR5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency>
application文件配置
//eureka server注冊(cè)的name,唯一標(biāo)識(shí)
spring.application.name=eureka-server
//eureka server服務(wù)的端口號(hào)
server.port=1111
啟動(dòng)類(lèi),加入@EnableEurekaServer注解。
@EnableEurekaServer
@SpringBootApplication
public class ApplicationDemo
{
public static void main(String[] args)
{
SpringApplication.run(ApplicationDemo.class, args);
}
}
運(yùn)行,訪(fǎng)問(wèn)http://localhost:1111/ ,出現(xiàn)以下頁(yè)面,則證明啟動(dòng)成功
如果想配置Eurek高可用集群,可以通過(guò)相互注冊(cè)的方式來(lái)實(shí)現(xiàn)。本地啟動(dòng),可以配置多個(gè)application,例如創(chuàng)建application-peer1和application-peer2。
application-peer1配置如下
server.port=1111
eureka.instance.hostname= peer1
spring.application.name=eureka-server
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:1112/eureka/
application-peer2配置如下
server.port=1112
eureka.instance.hostname= peer2
spring.application.name=eureka-server
eureka.client.serviceUrl.defaultZone=http://peer2:1111/eureka/
配本地host
127.0.0.1 peer1 peer1
打包mvn install,分別啟動(dòng)peer1和peer2
java -jar eureka.jar --spring.profiles.active=peer1
java -jar eureka.jar --spring.profiles.active=peer2
訪(fǎng)問(wèn)http://peer1:1111/或者http://peer2:1112/ ,即可看到兩個(gè)實(shí)例相互注冊(cè)。
EurekaServer.png
由于在線(xiàn)環(huán)境的發(fā)布腳步是統(tǒng)一的,可以采用只配置一個(gè)application,在多臺(tái)機(jī)器上部署的方式,例如10.120.163.01和10.120.163.02兩臺(tái)機(jī)器。
application配置如下
server.port=1111
spring.application.name=eureka-server
eureka.client.serviceUrl.defaultZone=http://10.120.163.01:1111/eureka/,http://10.120.163.01:1111/eureka/
然后在01,02兩臺(tái)機(jī)器上分別運(yùn)行這個(gè)服務(wù),訪(fǎng)問(wèn)10.120.163.01:1111/ 即可看到Eureka頁(yè)面。
2、服務(wù)者配置
服務(wù)者需要想Eureka注冊(cè)自己的信息,首先要保證上面例子中Eurek Server的peer1和peer2正常運(yùn)行。
新加一個(gè)Spring Boot工程,在pom文件中加入以下依賴(lài)
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Brixton.SR5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency>
application文件配置
//eureka provider服務(wù)的端口號(hào)
server.port=2222
//eureka provider注冊(cè)的name,唯一標(biāo)識(shí)
spring.application.name=eureka-provider
//指定注冊(cè)的Eureka Server地址
eureka.client.serviceUrl.defaultZone=http://peer:1111/eureka,http://peer:1112/eureka
對(duì)外提供index接口
@RestController
public class IndexController
{
@RequestMapping("/index")
public String index()
{
return "這里是Eureka Provider";
}
}
啟動(dòng)類(lèi),加入@EnableDiscoveryClient。
@EnableDiscoveryClient
@SpringBootApplication
public class ApplicationDemo
{
public static void main(String[] args)
{
SpringApplication.run(ApplicationDemo.class, args);
}
}
運(yùn)行,即可在http://peer1:1111/ 看到注冊(cè)信息。
3、消費(fèi)者配置
首先要保證Eurek Server的peer1和peer2正常運(yùn)行,eureka-provider正常運(yùn)行,并注冊(cè)到Eurek Server上。本節(jié)主要介紹Spring Cloud Feign客戶(hù)端配置。
新加一個(gè)Spring Boot工程,在pom文件中加入以下依賴(lài)
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Brixton.SR5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency>
application文件配置
//eureka provider服務(wù)的端口號(hào)
server.port=3333
//eureka consumer注冊(cè)的name,唯一標(biāo)識(shí)
spring.application.name=eureka-consumer
//指定注冊(cè)的Eureka Server地址
eureka.client.serviceUrl.defaultZone=http://peer:1111/eureka,http://peer:1112/eureka
Feign客戶(hù)端配置,消費(fèi)上面提到的Provider服務(wù)。新建一個(gè)interface,配置三個(gè)屬性。name為服務(wù)方的spring.application.name,RequestMapping為服務(wù)方提供的接口,fallback為降級(jí)策略。下面的配置:調(diào)用Porovider的/index接口;fallback為服務(wù)調(diào)用失敗后會(huì)調(diào)用該類(lèi)的方法,ConsumerFallback為本地類(lèi);
//Consumer接口
@FeignClient(name = "elements", fallback = ConsumerFallback.class)
public interface Consumer
{
@RequestMapping(value = "/index")
String index();
}
//ConsumerFallback類(lèi),實(shí)現(xiàn)Consumer接口
@Component
public class ConsumerFallback implements Consumer
{
@Override
public String index()
{
return "eureka feign客戶(hù)端訪(fǎng)問(wèn)失敗";
}
}
//測(cè)試類(lèi),注入這個(gè)bean,即可調(diào)用
@RestController
public class test
{
@Autowired
Consumer consumer;
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String testeureka()
{
return consumer.index();
}
}
啟動(dòng)類(lèi),加入@EnableDiscoveryClient和@EnableFeignClients。
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class ApplicationDemo
{
public static void main(String[] args)
{
SpringApplication.run(ApplicationDemo.class, args);
}
}
啟動(dòng),訪(fǎng)問(wèn)http://localhost:3333/test.html ,即可看到返回值“這里是Eureka Provider”。停掉Provider服務(wù),再次訪(fǎng)問(wèn),即可看到返回值"eureka feign客戶(hù)端訪(fǎng)問(wèn)失敗"。
更多詳細(xì)的配置,請(qǐng)參考SpringCloud官方文檔。