I.概要
装う、宣言型擬似HTTPクライアントのHTTPクライアントは、より簡単に書くなり、それが唯一のインターフェースが大幅にコードを簡素化し、サービスプロバイダにバインドされて完了するまでに、インターフェイス、および構成するために使用する注釈への道を作成する必要があります開発の量。
春クラウドでは、非常に単純なふりを使用して - インターフェイスを作成し、インターフェイス上でいくつかのメモを追加するために、コードは完了です。装うは、複数の注釈をサポートし、例えば装う自身の注釈の注釈JAX-RSなど。
装うへ春の雲は装うSpring MVCの注釈のサポートをするために強化され、リボンとユーレカの統合、装うをより便利に活用するためにされています。
春クラウド装うはNetflixの装うが、両方の強力な機能を提供することに加えて、春の雲リボンと春クラウドHystrixの統合を実現するだけでなく、クライアント定義に基づく宣言型のWebサービス方法を提供しています。
春クラウド装う助け、私たちは定義し、依存サービスインタフェースの定義を実装します。春クラウド装うの実現では、あなただけのクライアントを呼び出す春クラウドリボンセルフサービスパッケージの使用において開発の量を簡素化し、サービスプロバイダにバインドされているインターフェイスを完了するためのアノテーション方法でインタフェースとのconfigure、それを作成する必要があります。
プラグイン可能な注釈をサポートした春クラウド装うが、装う注釈、JAX-RSのアノテーションとSpring MVCの注釈をサポートしています。
第二に、原則
-
@EnableFeignClientsがFeignClientスキャン処理をロードするコメントを追加するには、オープンメインエントランス。インターフェイスを定義し、@FeignClientdコメントを追加するに装うクライアントの開発仕様書によります。
-
バックスキャンパケットのためのプログラムを開始するには、すべての注釈の@FeignClientsクラスをスキャンするとき、および方法は、インタフェース装う聖歌呼び出しで定義されたときに発生するJDKエージェントを経由して、情報の春IOC注入コンテナを話します特定requestTemplate。エージェントを生成する際に、ふりが各インタフェースメソッドのrequestTemplateを作成します。エージェントを生成する際にふりを作成各RequestTemplateインターフェース方法のオブジェクトが変更されてもよいHTTPリクエストオブジェクトは、リクエストパラメータ名として、必要なすべての情報をカプセル化し、要求の方法および他の情報は、このプロセスで決定されます。
-
そして、RequestTemplate生成要求、ここクライアントJDKのURLConnectionネイティブと呼ばれるプロセスへのクライアントにその要求可能な場合は、ApacheのHttpClientを、OKhttp、最後のクライアントがカプセル化されていることができLoadBalanceClientクラス、結合リボン・ロードバランシングの毛サービス間のコール。
第三に、練習
SpringCloudチュートリアル:コードは、実際に基づいています。
①自宅の両方が開始され、8763ユーレカ・サーバー、サービス・ハローポートの設定を作成し、サービス・ハロー(8762)のチュートリアル1種類を開始
オープン:HTTP:// localhostを:8761 /
あなたは、2つのインスタンスに登録されているサービス・ハローユーレカ・サーバーを見つけます。
②サービス装うを作成します
そのポンポンファイルに組み込まれた新springbootモジュールは、装う依存春・クラウド・スターター・装うを開始し、ユーレカは依存春・クラウド・スターター・ユーレカを開始し、Webが依存springboot-スターター・ウェブ、コードを起動し、次のとおりです。
<?xmlのバージョン= " 1.0 "エンコード= " UTF-8 "?>
<プロジェクトの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 " >
<modelVersion> 4.0。0 </ modelVersion>
<groupIdを> com.wyma </ groupIdを>
<たartifactId>サービス-装う</たartifactId>
<バージョン> 0.0。1 -snapshot </バージョン>
<パッケージ> JAR </梱包>
<名前>サービス-装う</名前>
<説明>デモプロジェクトのための春ブーツ</記述>
<親>
<groupIdを> org.springframework.boot </ groupIdを>
<たartifactId>春・ブート・スターター・親</たartifactId>
<バージョン> 1.5。2 .RELEASE </バージョン>
<relativePath /> <! -ルック親からリポジトリ- >
</親>
<プロパティ>
<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>
</依存関係>
<依存>
<groupIdを> org.springframework.cloud </ groupIdを>
<たartifactId>春・クラウド・スタータ装う</たartifactId>
</依存関係>
<依存>
<groupIdを> org.springframework.boot </ groupIdを>
<たartifactId>春・ブート・スターター・ウェブ</たartifactId>
</依存関係>
<依存>
<groupIdを> org.springframework.boot </ groupIdを>
<たartifactId>ばねブートスタータ試験</たartifactId>
<スコープ>テスト</スコープ>
</依存関係>
</依存関係>
<dependencyManagement>
<依存性>
<依存>
<groupIdを> org.springframework.cloud </ groupIdを>
<たartifactId>春・クラウドの依存関係</たartifactId>
<バージョン> Dalston.RC1 </バージョン>
<タイプ> POM </タイプ>
<スコープ>インポート</スコープ>
</依存関係>
</依存関係>
</ dependencyManagement>
<ビルド>
<プラグイン>
<プラグイン>
<groupIdを> org.springframework.boot </ groupIdを>
<たartifactId>春・ブートのmaven-pluginの</たartifactId>
</プラグイン>
</プラグイン>
</ビルド>
<リポジトリ>
<リポジトリ>
<ID>ばねマイルストーン</ ID>
<名前>春のマイルストーン</名前>
<URL>のhttps:// repo.spring.io/milestone </ URL>
<スナップショット>
<有効> 偽 </有効>
</スナップショット>
</リポジトリ>
</リポジトリ>
</プロジェクト>
プロジェクトのプロファイルapplication.ymlファイルでは、サービス装うと呼ばれるプログラムを指定し、ポート番号8765、登録されたサービスのアドレスはhttp:// localhostを:8761 /ユーレカ/、次のコード:
ユーレカ:
クライアント:
serviceURL:
defaultZoneます。http:// localhostを:8761 /ユーレカ/
サーバー:
ポート:8765
春:
応用:
名前:サービス -feign
起動クラスのServiceFeignApplicationプログラムでは、プラス@EnableFeignClientsはオープン装う機能コメント:
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FeignApplication {
public static void main(String[] args) {
SpringApplication.run(FeignApplication.class, args);
}
}
定义一个feign接口,通过@ FeignClient(“服务名”),来指定调用哪个服务。比如在代码中调用了service-hello服务的“/hello”接口,代码如下:
@FeignClient(value = "service-hello")
public interface SchedualServicehello {
@RequestMapping(value = "/hello",method = RequestMethod.GET)
String sayhelloFromClientOne(@RequestParam(value = "name") String name);
}
在Web层的controller层,对外暴露一个”/hello”的API接口,通过上面定义的Feign客户端SchedualServicehello 来消费服务。代码如下:
@RestController
public class HelloController {
@Autowired
SchedualServicehello schedualServicehello;
@RequestMapping(value = "/hello",method = RequestMethod.GET)
public String sayhello(@RequestParam String name){
return schedualServicehello.sayhelloFromClientOne(name);
}
}
启动程序,多次访问http://localhost:8765/hello?name=51ma,浏览器交替显示:
hello 51ma,i am from port:8763
hello 51ma,i am from port:8762
四、参考资料
五、源码
加入qq群:Spring全家桶技术交流①群196165973,免费获取源码。