サービス管理はマイクロサービスアーキテクチャと、最も基本的なコアモジュールで、主な役割は、サービスインスタンスの各マイクロ登録と発見の自動化を達成することです。春クラウドユーレカはサービスの春クラウドNetflixのマイクロスイートの一部である、ベースのネットフリックスEUREKA 2つのパッケージ、マイクロサービスアーキテクチャの主な原因のサービス管理機能を作りました。
ユーレカのサービスは、2つの主要コンポーネントで、サーバー発見コンポーネント(ユーレカサーバ)とクライアントの検出コンポーネント(ユーレカクライアント)を含有していることが分かっ。サーバー検出コンポーネントは、サービス登録機能、主に登録し、発見処理サービスのために使用されるクライアントの発見コンポーネントを提供するサービスレジストリとして知られています。サービスレジストリ、サービスプロバイダとサービスコンシューマ:文字クラスによると、ユーレカでは、サービス発見メカニズムは、3つの役割が含まれています。
まず、使用ユーレカ登録サービス
1. Mavenの親プロジェクトを作成します。
名前の親Mavenプロジェクト、作成 springcloud-ユーレカ親を 、プロジェクトのpom.xml内で春のクラウド版の依存情報を追加します。
<?xmlのバージョン= " 1.0 "エンコード= " UTF-8 "?> <プロジェクトのxmlns = " http://maven.apache.org/POM/4.0.0 " のxmlnsを:XSI = " のhttp://www.w3 .ORG / 2001 / XMLスキーマ・インスタンス" のxsi:のschemaLocation = " http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd 」 > <modelVersion> 4.0。0 </ modelVersion> <groupIdを> com.fix </ groupIdを> <たartifactId> springcloud-ユーレカ親</たartifactId>-snapshot </バージョン> <! -父依赖- > <親> <groupIdを> org.springframework.boot </ groupIdを> <たartifactId>春・ブート・スターター・親</たartifactId> <バージョン> 2.1。5 .RELEASE </バージョン> </親> <! -编码以及Javaの版本- > <プロパティ> <project.build.sourceEncoding> UTF- 8 </project.build.sourceEncoding> <project.reporting.outputEncoding> UTF- 8 </project.reporting.outputEncoding> <のjava.version> 1.8 </java.version> </プロパティ> <のgroupId> org.springframework.cloud </のgroupId> <たartifactId>ばねクラウド依存性</たartifactId> <バージョン> Greenwich.SR1 </バージョン> <タイプ> POM </ type>の <スコープ>インポート< /スコープ> </依存関係> </依存関係> </ dependencyManagement> <構築> <プラグイン> <! -春ブーツ包含的にMaven插件、可以将项目打包成可以执行的ジャー文件- > <プラグイン> <groupIdを> org.springframework.boot </ groupIdを> <たartifactId>春・ブートのmaven-pluginの</たartifactId> </プラグイン> </プラグイン> </構築> </プロジェクト>
2.サービスのレジストリを構築
親プロジェクトで springcloud-ユーレカ親 、サブモジュールのMaven作成 springcloud-ユーレカ・サーバーを のpom.xmlに依存関係を追加し、サービスレジストリ(サーバエンジニア)として:
<?xmlのバージョン= " 1.0 "エンコード= " UTF-8 "?> <プロジェクトのxmlns = " http://maven.apache.org/POM/4.0.0 " のxmlnsを:XSI = " のhttp://www.w3 .ORG / 2001 / XMLスキーマ・インスタンス" のxsi:のschemaLocation = " http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd 」 > <親> <たartifactId> springcloud-ユーレカ親</たartifactId> <groupIdを> com.fix </ groupIdを> <バージョン> 1.0 -snapshot </バージョン> </親> <modelVersion>4.0。0 </ modelVersion> <たartifactId> springcloud-ユーレカサーバ</たartifactId> <依存性> <依存性> <のgroupId> org.springframework.cloud </のgroupId> <たartifactId> springcloud-スタータのNetflix、ユーレカサーバ< /たartifactId> </依存関係> </依存関係> </プロジェクト>
次のように、コンフィギュレーション・ファイルの設定情報のプロファイルapplication.yml、増加したポート番号を作成します。
サーバー: ポート:8761 ユーレカ: インスタンス: ホスト名:localhostの クライアント: 登録 -with-ユーレカ:偽 フェッチ -registry:偽 サービス - URL: defaultZone: のhttp:// $ {eureka.instance.hostname}:$ {はserver.port }/ユーレカ/
上記構成では、8761のポート番号ユーレカレジストリを表し、このポートに登録されたすべてのサービスの一例であるべきです。 eureka.instance.hostnameは ユーレカレジストリの名前の例では、ローカルホストであることを示し、 登録-と-ユーレカ:偽の 登録センターの春のブートアプリケーションは、登録センターが自分自身を登録する必要がないことを示しています。 レジストリ-FETCH:偽の 設定を責任は、レジストリサービスインスタンスを維持することですので、あなたがサービスを検索する必要はありません。 defaultZoneは アドレスレジストリです。
次に、クラスを開始し、追加のプロジェクトを作成します @EnableEurekaServer 注釈はクラスラベルを宣言するために使用されることはErueka Serverです:
パッケージcom.fix.springcloud.eureka。 輸入org.springframework.boot.SpringApplication。 輸入org.springframework.boot.autoconfigure.SpringBootApplication。 輸入org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer パブリック クラスEurekaServerMain { 公共 静的 ボイドメイン(文字列[]引数){ SpringApplication.run(EurekaServerMain。クラス、引数)。 } }
開始 springcloud-ユーレカサーバ モジュールは、アクセスのブラウザで:HTTP:// localhostを:8761 / 情報パネルユーレカを見ることができます:
この時点で、すでにユーレカは、空「は、現在ユーレカで登録インスタンス」である現在のサービスインスタンスを表示するには、登録されています。
3.クライアントのプロジェクトをビルドするには
親プロジェクトで springcloud-ユーレカ親 、サブモジュールのMaven作成 springcloud-ユーレカ・ユーザーを のpom.xmlに依存関係を追加し、クライアントのプロジェクトとして:
<?xml version = "1.0"エンコード= "UTF-8"?>
<プロジェクトのxmlns = "http://maven.apache.org/POM/4.0.0"
のxmlnsを:XSI = "のhttp://www.w3 .ORG / 2001 / XMLスキーマ・インスタンス」
のxsi:のschemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<親>
<たartifactId> springcloud-ユーレカ親</たartifactId>
<groupIdを> com.fix </ groupIdを>
<バージョン> 1.0-SNAPSHOT </バージョン>
</親>
<modelVersion> 4.0.0 </ modelVersion>
<たartifactId> springcloud-ユーレカ・ユーザー</たartifactId>
<依存性>
<! > -必要性はの導入に依存するとき--Finchley、春の雲のグリニッジのバージョンは、クライアントプロジェクトを作成します
。<依存>
<groupIdを> org.springframework.boot </ groupIdを>
<たartifactId>春・ブート・スターター・ウェブ</たartifactId>
</依存関係>
<依存>
<groupIdを> org.springframework.cloud </ groupIdを>
<たartifactId>春・クラウド・スターター・ネットフリックス-ユーレカ・クライアント</たartifactId >
</依存関係>
</依存関係>
</プロジェクト>
Application.ymlプロファイルを作成し、以下のように、設定ファイルになど、ポート番号、サーバーアドレスを、ユーレカサービスインスタンスを設定します。
サーバー:
ポート:8000
ユーレカ:
インスタンス:
好む-IPアドレス:ホストのIpかどうかをtrueに#
:クライアント
サービス-URL:
defaultzoneます。http:// localhost:ユーレカサーバーアドレスを指定するには8761 /ユーレカ/#
:春
アプリケーション:
名前:springcloud-ユーレカ、ユーザー
クライアントブートストラップクラスを作成 EurekaUserMainを 、そして追加 @EnableEurekaClient アノテーションはクラスラベルユーレカクライアントコンポーネントを宣言するために使用されています。詳細は以下のとおりです。
@SpringBootApplication @EnableEurekaClient パブリック クラスEurekaUserMain { 公共 静的 ボイドメイン(文字列[]引数){ SpringApplication.run(EurekaUserMain。クラス、引数)。 } }
開始 springcloud-ユーレカ・サーバーの モジュール開始後 springcloud-ユーレカ・ユーザー 、モジュール再訪HTTP:// localhostを:8761 / 、あなただけで"現在ユーレカに登録インスタンス"であっ作成されている見ることができます SPRINGCLOUD-EUREKA-USER 例:
同时,可以看到该页面有红色的字体提示“EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.”,这是因为本地调试时触发了Eureka Server的自我保护机制,该机制会使注册中心维护的实例不是很准确。在本地开发时候,可以在服务注册中心中配置 eureka.server.enable-self-preservation=false 参数来关闭保护机制。
二、使用Eureka实现服务间的调用
在上一步中,已经将用户服务 springcloud-eureka-user 注册到了服务注册中心,接下来将创建一个订单服务,并实现用户服务和订单服务之间的调用。
1. 搭建订单服务工程
在父工程 springcloud-eureka-parent 中,创建子模块 springcloud-eureka-order ,pom.xml文件和 springcloud-eureka-user 的类似,具体内容如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>springcloud-eureka-parent</artifactId> <groupId>com.fix</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>springcloud-eureka-order</artifactId> <dependencies> <!--Finchley,Greenwich版本的spring cloud,创建客户端工程的时候需要引入该依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies> </project>
创建配置文件 application.yml ,配置Eureka服务实例的端口号,服务注册中心地址等信息,具体内容如下:
server: port: 7900 eureka: instance: prefer-ip-address: true #是否显示主机的Ip client: service-url: defaultZone: http://localhost:8761/eureka/ #指定eureka服务端地址 spring: application: name: springcloud-eureka-order #指定应用名称
创建客户端引导类 EurekaOrderMain :
@SpringBootApplication @EnableEurekaClient public class EurekaOrderMain { public static void main(String[] args) { SpringApplication.run(EurekaOrderMain.class, args); } }
创建订单实体类:
package com.fix.springcloud.eureka.pojo; public class Order { private String id; private Double price; private String receiverName; private String receiverAddress; private String receiverPhone; public String getId() { return id; } public void setId(String id) { this.id = id; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public String getReceiverName() { return receiverName; } public void setReceiverName(String receiverName) { this.receiverName = receiverName; } public String getReceiverAddress() { return receiverAddress; } public void setReceiverAddress(String receiverAddress) { this.receiverAddress = receiverAddress; } public String getReceiverPhone() { return receiverPhone; } public void setReceiverPhone(String receiverPhone) { this.receiverPhone = receiverPhone; } @Override public String toString() { return "Order{" + "id='" + id + '\'' + ", price=" + price + ", receiverName='" + receiverName + '\'' + ", receiverAddress='" + receiverAddress + '\'' + ", receiverPhone='" + receiverPhone + '\'' + '}'; } }
创建订单Controller,内容如下:
package com.fix.springcloud.eureka.controller; import com.fix.springcloud.eureka.pojo.Order; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; @RestController public class OrderController { /** * 通过订单id查询订单信息 * @param id 订单id * @return 订单详情 */ @GetMapping("/order/{id}") public String findOrderById(@PathVariable String id){ Order order =new Order(); order.setId("123"); order.setPrice(200.50); order.setReceiverName("张三"); order.setReceiverAddress("陕西西安"); order.setReceiverPhone("123456799"); return order.toString(); } }
2. 编写用户服务功能
在 springcloud-eureka-user 实例工程的引导类中,创建 RestTemplate 的Spring实例,代码如下:
@SpringBootApplication @EnableEurekaClient public class EurekaUserMain { public static void main(String[] args) { SpringApplication.run(EurekaUserMain.class, args); } @Bean public RestTemplate initRestTemplate(){ return new RestTemplate(); } }
创建用户Controller,调用订单Controller接口,查询订单信息,具体代码如下:
package com.fix.springcloud.eureka.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class UserController { @Autowired private RestTemplate restTemplate; @GetMapping("/findOrderByUser/{id}") public String findOrderByUser(@PathVariable String id) { int orderId = 123; return this.restTemplate.getForObject("http://localhost:7900/order/" + orderId, String.class); } }
3.启动各Eureka实例进行测试
依次启动服务注册中心, springcloud-eureka-order 以及 springcloud-eureka-user 实例,访问注册中心管理界面 http://localhost:8761/ 确认两个服务实例已经注册成功:
访问 springcloud-eureka-user 实例的接口接口 http://localhost:8000/findOrderByUser/123,可以看到有数据正常返回:
表示使用Eureka进行服务间接口调用成功。