若是你對 Spring Cloud 體系還不是很瞭解,能夠先讀一下 Spring Cloud 都有哪些模塊html
Eureka 是 Netflix 開源的服務註冊發現組件,服務發現能夠說是微服務架構的核心功能了,微服務部署以後,必定要有服務註冊和發現的能力,Eureka 就是擔任這個角色的。若是你用過 dubbo 的話,那必定知道 dubbo 中服務註冊和發現的功能是用 zookeeper 來實現的。java
Eureka 目前是 2.x 版本,而且官方已經宣佈再也不維護更新。不過其實 Eureka 已經很穩定了,當作註冊中心徹底沒有問題。Spring Cloud 集成了 Eureka ,並作了完善的封裝。方便咱們使用 Spring boot 開發的時候簡單配置就能夠使用。git
微服務框架中有三類角色,分別是註冊中心、服務提供者、服務消費者,註冊中心就是今天要說的主角 Eureka,這篇文章簡單說明 Spring Cloud Eureka 的使用,模擬實現單點和高可用註冊中心,並簡單介紹服務提供者和服務消費者如何使用 Eureka 提供的服務註冊和發現功能。github
版本說明
Java : 1.8web
Spring Boot : 2.1.3.RELEASEspring
Spring Cloud: Finchley.SR2docker
之說以要說一下版本,由於 Finchley.SR2 版本較以前的版本包名有變化,因此在引用 maven 包的時候要注意。bootstrap
一、引用 maven 包,其中架構
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.SR2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!-- 最新版的 eureka 服務端包 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <!-- 監控管理 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
二、新建 bootstrap.yml,並配置 Spring cloud 參數app
spring: application: name: kite-eureka-center cloud: inetutils: ## 網卡設置 ignoredInterfaces: ## 忽略的網卡 - docker0 - veth.* - VM.* preferredNetworks: ## 優先的網段 - 192.168
三、新建 application.yml ,並配置參數
server: port: 3000 eureka: instance: hostname: eureka-center appname: 註冊中心 client: registerWithEureka: false # 單點的時候設置爲 false 禁止註冊自身 fetchRegistry: false serviceUrl: defaultZone: http://localhost:3000/eureka server: enableSelfPreservation: false evictionIntervalTimerInMs: 4000
bootstrap.yml 和 application.yml 的區別:
bootstrap.yml 在 application.yml 以前啓動;
bootstrap.yml 配置 application 的 name、spring.cloud.config.server.git.uri、一些encryption/decryption(加密/解密)信息;
application.yml 的信息會覆蓋 bootstrap.yml 中的內容,當遇到相同的配置的時候;
四、新建 Application.java 啓動文件
@EnableEurekaServer @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
@EnableEurekaServer
表示使用 Eureka Server 端功能,也就是啓動爲一個註冊中心節點。
五、運行 Application.java ,訪問 http://localhost:3000 便可看到 Eureka 提供的 ui 控制檯。
接下來建立一個服務提供者,並註冊到上面建立的 Eureka 註冊中心。
一、添加 maven 依賴包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- eureka 客戶端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
二、配置 application.yml
server: port: 3001 eureka: instance: preferIpAddress: true client: serviceUrl: defaultZone: http://localhost:3000/eureka ## 註冊到 eureka spring: application: name: single-provider ## 應用程序名稱,後面會在消費者中用到
三、建立一個簡單的 RESTful 接口 controller
@Slf4j @RestController public class ProviderController { @Autowired private DiscoveryClient discoveryClient; @RequestMapping(value = "/hello") public String hello(){ List<String> services = discoveryClient.getServices(); for(String s : services){ log.info(s); } return "hello spring cloud!"; } @RequestMapping(value = "/nice") public String nice(){ List<String> services = discoveryClient.getServices(); for(String s : services){ log.info("gogogo" + s); } return "nice to meet you!"; } }
四、建立 spring boot 啓動類
@EnableEurekaClient @SpringBootApplication public class SingleProviderApplication { public static void main(String[] args) { SpringApplication.run(SingleProviderApplication.class, args); } }
@EnableEurekaClient
修飾,表示要註冊到註冊中心。
五、啓動項目,正常狀況下就註冊到了 Eureka 註冊中心,打開 Eureka 控制檯,會看到已經出現了這個服務
有了服務提供者,接下來建立一個消費者來消費一下
一、引用 maven 包
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
二、配置 application.yml
server: port: 3002 eureka: client: serviceUrl: defaultZone: http://127.0.0.1:3000/eureka ## 註冊到 eureka instance: preferIpAddress: true spring: application: name: single-customer
三、開始消費提供者提供的服務接口,這裏演示了兩種消費方法,一種是用 RestTemplate ,另一種是用 FeignClient,Feign 一樣是 Netflix 開源,並被 Spring Cloud 封裝到 spring-cloud-starter-openfeign 包中。
建立啓動類,並添加相關注解
@SpringBootApplication @EnableEurekaClient @EnableFeignClients public class SingleCustomerApplication { /** * 注入 RestTemplate * 並用 @LoadBalanced 註解,用負載均衡策略請求服務提供者 * 這是 Spring Ribbon 的提供的能力 * @return */ @LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(SingleCustomerApplication.class, args); } }
@EnableEurekaClient
聲明此項目爲一個 eureka 客戶端,@EnableFeignClients
聲明此項目能夠使用 Feign。
四、建立一個服務接口類,這是 Feign 的使用方式,詳細的用法能夠查一下 Spring Cloud Feign 相關文檔
/** * IHelloService * 配置服務提供者:single-provider 是服務提供者的 application.name */ @FeignClient("single-provider") public interface IHelloService { @RequestMapping(value = "/hello") String hello(); @RequestMapping(value = "nice") String nice(); }
@FeignClient
註解的 value 爲服務提供者的 appplication.name 。
五、建立一個 Controller 用於調用服務
@RestController public class ConsumerController { @Autowired private RestTemplate restTemplate; @Autowired private IHelloService helloService; private static final String applicationName = "single-provider"; @RequestMapping(value = "feignRequest") public Object feignRequest(){ String s = helloService.nice(); return s; } @RequestMapping(value = "commonRequest") public Object commonRequest(){ String url = "http://"+ applicationName +"/hello"; String s = restTemplate.getForObject(url,String.class); return s; } }
其中 feignRequest 方法是使用了 Feign 的方式調用服務接口;
commonRequest 方法是用 RestTemplate 提供的方法調用服務接口;
六、最後,啓動服務,訪問地址:http://localhost:3002/commonRequest 和 http://localhost:3002/feignRequest
若是你以爲寫的還能夠的話,請點個「推薦」吧
歡迎關注,不按期更新本系列和其餘文章
古時的風箏
,進入公衆號能夠加入交流羣