您好,登錄后才能下訂單哦!
小編給大家分享一下Spring Cloud如何構建Eureka應用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
Eureka 介紹
Eureka提供基于REST的服務,在集群中主要用于服務管理。Eureka提供了基于Java語言的客戶端組件,客戶端組件實現了負載均衡的功能,為業務組件的集群部署創造了條件。使用該框架,可以將業務組件注冊到Eureka容器中,這些業務組件可進行集群部署,Eureka主要維護這些服務的列表并自動檢查它們的狀態。
程序結構
創建Eureka Server
maven依賴
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies>
更改spring boot 啟動端口 在application.yml
server: port: 8761
開啟Eureka服務注解 @EnableEurekaServer
@EnableEurekaServer @SpringBootApplication public class EKServerApplication { public static void main(String[] args) { new SpringApplicationBuilder(EKServerApplication.class).run(args); } }
啟動springboot
[Thread-11] o.s.c.n.e.server.EurekaServerBootstrap: Initialized server context [main] s.b.c.e.t.TomcatEmbeddedServletContainer: Tomcat started on port(s): 8761 (http) [main] .s.c.n.e.s.EurekaAutoServiceRegistration: Updating port to 8761 [main] c.b.firstEkServer.EKServerApplication: Started EKServerApplication in 8.594 seconds (JVM running for 9.523)
啟動期間會出現一個無法連接到服務器的異常 這個是由于Eureka在啟動的時候會把自己當作一個客戶端去服務器抓取注冊信息
復制代碼 代碼如下:
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
增加如下配置啟動時便不會再出現該異常
eureka: client: registerWithEureka: false fetchRegistry: false
registerWithEureka 聲明是否將自己的信息注冊到Eureka服務器,默認值為true。
fetchRegistry 聲明是否到Eureka服務器中抓取注冊信息,默認值為true。
在瀏覽器中訪問 http://localhost:8761 查看Eureka控制臺 輸入圖片說明
創建服務提供者
依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency>
在 application.yml 中配置端口、Eureka實例名稱和Eureka服務地址
server: port: 8080 spring: application: name: ek-provider eureka: instance: hostname: localhost client: serviceUrl: defaultZone: http://localhost:8761/eureka/
創建一個 REST 服務
@RestController public class HelloController { @RequestMapping("/hello") public String hello(HttpServletRequest request) { return "hello:" + request.getRequestURL(); } }
開啟Eureka客戶端注解 @EnableEurekaServer
@EnableEurekaClient @SpringBootApplication public class EkProviderApplication { public static void main(String[] args) { new SpringApplicationBuilder(EkProviderApplication.class).run(args); } }
啟動之后在 Eureka 控制臺可以看到服務提供者已經在 Eureka 中注冊
創建服務調用者
依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency>
在 application.yml 中配置端口、Eureka實例名稱和Eureka服務地址
server: port: 9000 spring: application: name: ek-invoke eureka: instance: hostname: localhost client: serviceUrl: defaultZone: http://localhost:8761/eureka/
編寫一個 REST 服務 調用服務提供者的 “/hello”
@RestController @Configuration public class InvokeController { @Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); } @RequestMapping("/invoke") public String invoke() { RestTemplate restTemplate = getRestTemplate(); return restTemplate.getForObject("http://ek-provider/hello", String.class); } }
在傳統模式中,我們通常會用Apache中的Httpclient來調用 REST 服務,在這里我們使用 Spring 提供調用 REST 服務的組件 RestTemplate。 RestTemplate 本身并不具備調用分布式服務的能力,但是RestTemplate的bean被@LoadBalanced注解修飾后,這個RestTemplate實例就具有訪問分布式服務的能力,這得益于 Spring 為其提供的各種攔截器
開啟Eureka客戶端注解 @EnableEurekaServer
@EnableEurekaClient @SpringBootApplication public class EkInvokeApplication { public static void main(String[] args) { new SpringApplicationBuilder(EkInvokeApplication.class).run(args); } }
啟動之后在 Eureka 控制臺可以看到服務調用者已經在 Eureka 中注冊
之后在瀏覽器訪問服務調用者的 “invoke” 接口 返回如下
以上是“Spring Cloud如何構建Eureka應用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。