最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Spring Cloud Consul 實現(xiàn)服務注冊和發(fā)現(xiàn)

 更新時間:2018年03月29日 11:07:26   作者:田園里的蟋蟀  
這篇文章主要介紹了Spring Cloud Consul 實現(xiàn)服務注冊和發(fā)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Spring Cloud 是一個基于 Spring Boot 實現(xiàn)的云應用開發(fā)工具,它為基于 JVM 的云應用開發(fā)中涉及的配置管理、服務發(fā)現(xiàn)、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分布式會話和集群狀態(tài)管理等操作提供了一種簡單的開發(fā)方式。通過 Spring Boot 風格進行再封裝屏蔽掉了復雜的配置和實現(xiàn)原理,最終給開發(fā)者留出了一套簡單易懂、易部署和易維護的分布式系統(tǒng)開發(fā)工具包。

Spring Cloud 包含了多個子項目(針對分布式系統(tǒng)中涉及的多個不同開源產(chǎn)品),比如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud CloudFoundry、Spring Cloud AWS、Spring Cloud Security、Spring Cloud Commons、Spring Cloud Zookeeper、Spring Cloud CLI 等項目。

項目地址:https://github.com/yuezhongxin/spring-cloud-consul-sample

ASP.NET Core 2.0 & Docker & Consul 的實現(xiàn):https://github.com/yuezhongxin/HelloDocker.Sample

目前的測試站點,使用 ASP.NET Core 結合 Conusl 和 Fabio 搭建的微服務集群,因為各服務之間的通信基于 HTTP REST 協(xié)議,所以服務的實現(xiàn)可以跨語言,下面我們就開發(fā)一個 Spring Boot 服務,然后使用 Spring Cloud Consul 將服務注冊到已有的集群中。

Java 開發(fā)工具我選用的 IntelliJ IDEA(MacOS 安裝教程),目前使用很好(Color Scheme 使用系統(tǒng)的 Darcula,字體大小 14),Java SDK 需要額外下載安裝(我安裝的版本 10)。

因為第一次使用 IntelliJ IDEA,下面我把創(chuàng)建項目的過程,貼詳細一點。

首先,創(chuàng)建項目(選擇“Spring Initializr”,Spring Boot 項目),默認選擇 Java SDK 10:

然后填寫項目的基本信息(Artifact 為"spring-cloud-consul-sample",其他為默認):

注:Maven 是一個項目管理和構建工具,包含三個關鍵組件:項目對象模型(POM)、依賴項管理模型、構建生命周期和階段。

Group ID 和 Artifact ID 的區(qū)別,如果把 Group ID 看作是公司,那 Artifact ID 就可以看作是公司部門,有點類似于 .NET 中的解決方案和類庫的關系,比如 Spring Cloud 項目的 Group ID 為org.springframework.cloud,Spring Cloud Consul 的 Artifact ID 為spring-cloud-starter-consul-discovery。

下面選擇創(chuàng)建 Spring Boot 項目類型(選擇 Web 依賴項):

然后填寫項目名稱和項目目錄:

然后點擊“Finish”,就完成啦。

像開發(fā) ASP.NET Core 應用程序一樣,我們需要先引用各種程序包,Spring Boot 項目也是一樣,因為使用 Maven 進行依賴管理,我們需要在pom.xml中配置依賴關系,配置如下:

<parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>2.0.0.RELEASE</version>
 <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.8</java.version>
</properties>

<dependencies>
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
 </dependency>

 <dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-consul-discovery</artifactId>
 </dependency>

 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
  <scope>compile</scope>
 </dependency>

 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
 </dependency>
</dependencies>

<dependencyManagement>
 <dependencies>
  <dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-consul-dependencies</artifactId>
   <version>2.0.0.M7</version>
   <type>pom</type>
   <scope>import</scope>
  </dependency>
 </dependencies>
</dependencyManagement>

引用spring-cloud-starter-consul-discovery對應 Spring Cloud Consul,引用spring-boot-starter-actuator用作健康檢查(地址/actuator/health),另外 Actuator 還支持項目的監(jiān)控和管理。

這里再說下節(jié)點的作用:

  1. parent:父引用配置,會繼承父引用的配置。
  2. dependencies:當前引用配置,如果父引用配置了,子項目會自動引用。
  3. dependencyManagement:當然引用配置,如果父引用配置了,子項目不會自動引用,子項目只要用到的時候引用,不需要配置版本號。

然后再貼一下SpringCloudConsulSampleApplication.java的代碼:

package com.example.springcloudconsulsample;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.discovery.DiscoveryClient;

@EnableDiscoveryClient
@RestController
@SpringBootApplication
public class SpringCloudConsulSampleApplication {

 @Autowired
 private DiscoveryClient discoveryClient;

 /**
  * 獲取所有服務
  */
 @RequestMapping("/services")
 public Object services() {
  return discoveryClient.getServices();
 }

 @RequestMapping("/home")
 public String home() {
  return "Hello World";
 }

 public static void main(String[] args) {
  SpringApplication.run(SpringCloudConsulSampleApplication.class, args);
 }
}

增加@EnableDiscoveryClient注解,項目啟動的時候,會注冊當前 Spring Boot 服務。

在使用 ASP.NET Core 注冊服務的時候,配置信息會填寫在代碼中(如服務名稱和端口等,當然也可以在配置文件),然后使用 Consul 組件注冊服務(調用 Consul HTTP REST)。

Spring Cloud Consul 注冊服務的話,需要添加配置文件(Spring Boot 項目資源文件在 resources 目錄下)。

application.properties中添加配置:

spring.application.name=spring-boot-service

然后添加application.yml配置文件:

然后添加application.yml配置文件:

debug: true
server:
 port: 24543
spring:
 cloud:
 consul:
  host: 127.0.0.1
  port: 8500
  discovery:
  register: true
  hostname: 10.9.10.215
  serviceName: ${spring.application.name}
  healthCheckPath: /actuator/health
  healthCheckInterval: 15s
  tags: urlprefix-/${spring.application.name}
  instanceId: ${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}

上面配置需要再詳細說明說明下:

  1. debug配置是否調試模式,如果打包發(fā)布的話,需要設置為false。
  2. server.port配置的是 Spring Boot 服務的端口。
  3. spring.cloud.consul.host/port配置的是本地 Consul 的地址和端口(Server 節(jié)點和 Client 節(jié)點都可以),Spring Cloud Consul 會調用 Consul HTTP REST 接口,進行服務注冊。
  4. spring.cloud.consul.discovery.true配置啟動是否注冊服務,
  5. spring.cloud.consul.discovery.hostname配置 Spring Boot 服務的主機地址,也可以不進行配置,默認本機地址。
  6. spring.cloud.consul.discovery.serviceName配置 Consul 注冊的服務名稱,${spring.application.name}變量是我們上面application.properties配置文件中添加的配置。
  7. spring.cloud.consul.discovery.healthCheckPath配置 Consul 健康檢查地址,Actuator 組件幫我們進行了實現(xiàn),所以我們不需要額外的實現(xiàn),地址在服務啟動的時候,打印信息里面可以看到。
  8. spring.cloud.consul.discovery.healthCheckInterval配置 Consul 健康檢查頻率,也就是心跳頻率。
  9. spring.cloud.consul.discovery.tags配置 Consul 注冊服務的 Tags,設置為urlprefix-/serviceName的格式,是自動注冊到 Fabio 集群中。
  10. spring.cloud.consul.discovery.instanceId配置 Consul 注冊服務 ID。

上面的工作做完之后,我們還需要在本地啟動 Consul 和 Fabio

然后我們就可以直接使用 IntelliJ IDEA 調試項目了,按Shift + F9進行調試。

上面說到 Actuator 的打印信息:

2018-03-28 10:09:54.645 INFO 63482 --- [           main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/health],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-03-28 10:09:54.646  INFO 63482 --- [           main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/info],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-03-28 10:09:54.647  INFO 63482 --- [           main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto protected java.util.Map<java.lang.String, java.util.Map<java.lang.String, org.springframework.boot.actuate.endpoint.web.Link>> org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping.links(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)

或者我們也可以使用 Maven 打包發(fā)布,然后使用命令啟動服務。使用 IntelliJ IDEA 中的 Maven 進行打包,或者使用 Maven 命令打包都可以,這邊我們使用Maven 命令進行打包。

在我們安裝 IntelliJ IDEA 的時候,Maven 自動安裝了,但直接敲mvn -v會發(fā)現(xiàn)命令找不到,需要我們配置一下環(huán)境變量。

我自己的 Maven 文件目錄是/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3,可以在 IntelliJ IDEA 的配置設置中找到,然后我們執(zhí)行下面的命令:

$ export M2_HOME="/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3" && 
export PATH=$PATH:$M2_HOME/bin && 
chmod a+x "/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/bin/mvn"

然后檢查下 Maven 命令是否生效:

$ mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3
Java version: 10, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home
Default locale: zh_CN_#Hans, platform encoding: UTF-8
OS name: "mac os x", version: "10.13.2", arch: "x86_64", family: "mac"

然后我們修改application.yml中的debug:false,使用 Maven 進行打包(目錄切換到pom.xml平級):

$ mvn clean package -Dmaven.test.skip=true
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building spring-cloud-consul-sample 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.0.0:clean (default-clean) @ spring-cloud-consul-sample ---
[INFO] Deleting /Users/xishuai/Documents/項目文件/測試項目/spring-cloud-consul-sample/target
[INFO]
[INFO] --- maven-resources-plugin:3.0.1:resources (default-resources) @ spring-cloud-consul-sample ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ spring-cloud-consul-sample ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /Users/xishuai/Documents/項目文件/測試項目/spring-cloud-consul-sample/target/classes
[INFO]
[INFO] --- maven-resources-plugin:3.0.1:testResources (default-testResources) @ spring-cloud-consul-sample ---
[INFO] Not copying test resources
[INFO]
[INFO] --- maven-compiler-plugin:3.7.0:testCompile (default-testCompile) @ spring-cloud-consul-sample ---
[INFO] Not compiling test sources
[INFO]
[INFO] --- maven-surefire-plugin:2.20.1:test (default-test) @ spring-cloud-consul-sample ---
[INFO] Tests are skipped.
[INFO]
[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ spring-cloud-consul-sample ---
[INFO] Building jar: /Users/xishuai/Documents/項目文件/測試項目/spring-cloud-consul-sample/target/spring-cloud-consul-sample-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.0.0.RELEASE:repackage (default) @ spring-cloud-consul-sample ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.815 s
[INFO] Finished at: 2018-03-28T10:26:46+08:00
[INFO] Final Memory: 30M/114M
[INFO] ------------------------------------------------------------------------

生成的 jar 程序包,會在 target 目錄下,文件為spring-cloud-consul-sample-0.0.1-SNAPSHOT.jar(格式為項目名 + 版本號),然后我們可以直接啟動服務了:

$ java -jar target/spring-cloud-consul-sample-0.0.1-SNAPSHOT.jar
2018-03-28 10:33:31.750 INFO 63875 --- [   main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2b662a77: startup date [Wed Mar 28 10:33:31 CST 2018]; root of context hierarchy
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 (jar:file:/Users/xishuai/Documents/項目文件/測試項目/spring-cloud-consul-sample/target/spring-cloud-consul-sample-0.0.1-SNAPSHOT.jar!/BOOT-INF/lib/spring-core-5.0.4.RELEASE.jar!/) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of org.springframework.cglib.core.ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2018-03-28 10:33:31.971 INFO 63875 --- [   main] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2018-03-28 10:33:32.015 INFO 63875 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$4d45e598] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

 . ____   _   __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/ ___)| |_)| | | | | || (_| | ) ) ) )
 ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.0.0.RELEASE)

查看健康檢查是否成功:

查看 Consul 是否服務注冊成功:

查看 Fabio 集群是否包含服務:

服務注冊成功之后,我們可以手動進行發(fā)現(xiàn)服務,或者通過 Spring Cloud Ribbon/Feign 組件進行發(fā)現(xiàn),并提供負載均衡功能(類似于 Fabio 功能),后面再研究下。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • JAVA中的for循環(huán)幾種使用方法講解

    JAVA中的for循環(huán)幾種使用方法講解

    這篇文章主要介紹了JAVA中的for循環(huán)幾種使用方法講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java 遞歸遍歷實現(xiàn)linux tree命令方式

    Java 遞歸遍歷實現(xiàn)linux tree命令方式

    這篇文章主要介紹了Java 遞歸遍歷實現(xiàn)linux tree命令方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 關于Feign調用服務Headers傳參問題

    關于Feign調用服務Headers傳參問題

    這篇文章主要介紹了關于Feign調用服務Headers傳參問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Springbootadmin與security沖突問題及解決

    Springbootadmin與security沖突問題及解決

    這篇文章主要介紹了Springbootadmin與security沖突問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java程序常見異常及處理匯總

    Java程序常見異常及處理匯總

    這篇文章主要介紹了java程序常見異常及處理匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Spring Security自定義失敗處理器問題

    Spring Security自定義失敗處理器問題

    這篇文章主要介紹了Spring Security自定義失敗處理器問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java讀取excel圖片導入代碼示例(親測有效)

    java讀取excel圖片導入代碼示例(親測有效)

    在日常工作中,我們經(jīng)常要將一些照片插入到Excel表格中,這篇文章主要給大家介紹了關于java讀取excel圖片導入的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • Java實例講解動態(tài)代理

    Java實例講解動態(tài)代理

    動態(tài)代理指的是,代理類和目標類的關系在程序運行的時候確定的,客戶通過代理類來調用目標對象的方法,是在程序運行時根據(jù)需要動態(tài)的創(chuàng)建目標類的代理對象。本文將通過案例詳細講解一下動態(tài)代理,需要的可以參考一下
    2022-06-06
  • SpringBoot2.0 整合 Dubbo框架實現(xiàn)RPC服務遠程調用方法

    SpringBoot2.0 整合 Dubbo框架實現(xiàn)RPC服務遠程調用方法

    這篇文章主要介紹了SpringBoot2.0 整合 Dubbo框架 實現(xiàn)RPC服務遠程調用 ,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • Java JDK 動態(tài)代理的使用方法示例

    Java JDK 動態(tài)代理的使用方法示例

    Java 動態(tài)代理機制以巧妙的方式近乎完美地實踐了代理模式的設計理念。下面這篇文章主要給大家分享了關于Java JDK 動態(tài)代理的使用方法示例,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07

最新評論

宁津县| 闽清县| 丰台区| 招远市| 祁门县| 凤山县| 泸西县| 灵寿县| 交口县| 高清| 潞城市| 阳谷县| 咸宁市| 华宁县| 广西| 农安县| 铁岭市| 安达市| 阿拉善右旗| 新郑市| 武冈市| 孝昌县| 淄博市| 泰安市| 青州市| 岱山县| 沈阳市| 乌苏市| 永城市| 克东县| 敦煌市| 兖州市| 房产| 屏山县| 北票市| 会理县| 金山区| 理塘县| 湖州市| 大厂| 噶尔县|