您好,登錄后才能下訂單哦!
今天小編給大家分享一下怎么用Spring Cloud的Eureka實現服務注冊的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
Eureka 是 Netflix 開源的服務注冊發現組件,服務發現可以說是微服務架構的核心功能了,微服務部署之后,一定要有服務注冊和發現的能力,Eureka 就是擔任這個角色的。如果你用過 dubbo 的話,那一定知道 dubbo 中服務注冊和發現的功能是用 zookeeper 來實現的。
Eureka 目前是 2.x 版本,并且官方已經宣布不再維護更新。不過其實 Eureka 已經很穩定了,當做注冊中心完全沒有問題。Spring Cloud 集成了 Eureka ,并做了完善的封裝。方便我們使用 Spring boot 開發的時候簡單配置就可以使用。
微服務框架中有三類角色,分別是注冊中心、服務提供者、服務消費者,注冊中心就是今天要說的主角 Eureka,這篇文章簡單說明 Spring Cloud Eureka 的使用,模擬實現單點和高可用注冊中心,并簡單介紹服務提供者和服務消費者如何使用 Eureka 提供的服務注冊和發現功能。
版本說明
Java : 1.8
Spring Boot : 2.1.3.RELEASE
Spring Cloud: Finchley.SR2
之說以要說一下版本,因為 Finchley.SR2 版本較之前的版本包名有變化,所以在引用 maven 包的時候要注意。
單點注冊中心
創建 Eureka 注冊中心
1、引用 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>
2、新建 bootstrap.yml,并配置 Spring cloud 參數
spring:
application:
name: kite-eureka-center
cloud:
inetutils: ## 網卡設置
ignoredInterfaces: ## 忽略的網卡
- docker0
- veth.*
- VM.*
preferredNetworks: ## 優先的網段
- 192.168
3、新建 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 中的內容,當遇到相同的配置的時候;
4、新建 Application.java 啟動文件
@EnableEurekaServer
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@EnableEurekaServer 表示使用 Eureka Server 端功能,也就是啟動為一個注冊中心節點。
5、運行 Application.java ,訪問 http://localhost:3000 即可看到 Eureka 提供的 ui 控制臺。
創建一個服務提供者
接下來創建一個服務提供者,并注冊到上面創建的 Eureka 注冊中心。
1、添加 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>
2、配置 application.yml
server:
port: 3001
eureka:
instance:
preferIpAddress: true
client:
serviceUrl:
defaultZone: http://localhost:3000/eureka ## 注冊到 eureka
spring:
application:
name: single-provider ## 應用程序名稱,后面會在消費者中用到
3、創建一個簡單的 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!";
}
}
4、創建 spring boot 啟動類
@EnableEurekaClient
@SpringBootApplication
public class SingleProviderApplication {
public static void main(String[] args) {
SpringApplication.run(SingleProviderApplication.class, args);
}
}
@EnableEurekaClient 修飾,表示要注冊到注冊中心。
5、啟動項目,正常情況下就注冊到了 Eureka 注冊中心,打開 Eureka 控制臺,會看到已經出現了這個服務
創建一個服務消費者
有了服務提供者,接下來創建一個消費者來消費一下
1、引用 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>
2、配置 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
3、開始消費提供者提供的服務接口,這里演示了兩種消費方法,一種是用 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。
4、創建一個服務接口類,這是 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 。
5、創建一個 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 提供的方法調用服務接口;
以上就是“怎么用Spring Cloud的Eureka實現服務注冊”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。