spring cloudマイクロサービス分布クラウドアーキテクチャ-サービス消費者Feign
3587 ワード
一、Feign概要
Feignは、Httpクライアントを書くことがより簡単になるように、声明式の擬似Httpクライアントである。Feignを使用すると,一つのインターフェースを作成し,注釈するだけでよい。これは挿抜可能な注釈特性を持っていて、Feign注解とJAX-RS注解を使用できます。Feignは、挿抜可能なエンコーダおよびデコーダをサポートする。FeignはデフォルトではRibbonを統合し,Eurekaと結合し,デフォルトでは負荷均衡の効果を実現した。Spring Cloud大企業分布式マイクロサービスクラウドのソースコードの構造を追加してください。
簡単に言うと: Feignは、インターフェースベースの注釈 を採用している。 Feignは、ribbonを統合し、負荷の均衡を持つ能力 を有する。はHystrixを統合し、溶断能力を持つ を有する。
二、準備工作
前回のプロジェクトを引き続き使って、eurka-serverを起動して、ポートは8761です。Service-hiを2回起動します。ポートはそれぞれ8762、8773です。
三、feignを作成するサービス
新しいspring-bootプロジェクトをserice-feignと名付けて、そのpomファイルにFeignの初歩依存spring-cloud-starter-feignを導入して、Eurekaの初歩依存spring-cloud-netflix-eure-client、Webの初歩依存spring-borg-starter-web、コードは以下の通りです。
Feignは、Httpクライアントを書くことがより簡単になるように、声明式の擬似Httpクライアントである。Feignを使用すると,一つのインターフェースを作成し,注釈するだけでよい。これは挿抜可能な注釈特性を持っていて、Feign注解とJAX-RS注解を使用できます。Feignは、挿抜可能なエンコーダおよびデコーダをサポートする。FeignはデフォルトではRibbonを統合し,Eurekaと結合し,デフォルトでは負荷均衡の効果を実現した。Spring Cloud大企業分布式マイクロサービスクラウドのソースコードの構造を追加してください。
簡単に言うと:
二、準備工作
前回のプロジェクトを引き続き使って、eurka-serverを起動して、ポートは8761です。Service-hiを2回起動します。ポートはそれぞれ8762、8773です。
三、feignを作成するサービス
新しいspring-bootプロジェクトをserice-feignと名付けて、そのpomファイルにFeignの初歩依存spring-cloud-starter-feignを導入して、Eurekaの初歩依存spring-cloud-netflix-eure-client、Webの初歩依存spring-borg-starter-web、コードは以下の通りです。
4.0.0
com.forezp
service-feign
0.0.1-SNAPSHOT
jar
service-feign
Demo project for Spring Boot
com.forezp
sc-f-chapter3
0.0.1-SNAPSHOT
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-openfeign
プロジェクトのプロファイルapplication.ymlファイルで、指定プログラム名はservice-feignで、ポート番号は8765で、サービス登録住所はhttp:/local host:8761/eureka/となります。コードは以下の通りです。eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/server:
port: 8765spring: application:
name: service-feign
プログラムの起動クラスServiceFeignAppleicationに@EnbaleFeign Clients注釈を加えてFeignの機能を開始します。@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableFeignClients
public class ServiceFeignApplication
{ public static void main(String[] args)
{ SpringApplication.run( ServiceFeignApplication.class, args );
}}
一つのfeignインターフェースを定義し、@Feign Clientを通じてどのサービスを呼び出すかを指定します。例えば、コードでservice-hiサービスの「/hi」インターフェースを呼び出します。コードは以下の通りです。@FeignClient(value = "service-hi")
public interface SchedualServiceHi
{
@RequestMapping(value = "/hi",
method = RequestMethod.GET)
String sayHiFromClientOne
(@RequestParam(value = "name")
String name);
}
Web層のcontroller層において、外部には「hi」というAPIインターフェースが露出され、上記で定義されたFeignクライアントSchhedualServiceHiによってサービスが消費される。コードは以下の通りです@RestControllerpublic class HiController
{ // , 。 Bean , , 。
@Autowired SchedualServiceHi schedualServiceHi;
@GetMapping(value = "/hi")
public String sayHi
(
@RequestParam String name)
{
return schedualServiceHi.sayHiFromClientOne( name );
}
}
プログラムを起動して、何度もhttp:/local host:8765/hi?name=forezpにアクセスして、ブラウザが交互に表示されます。hi forezp,i am from port:8762 hi forezp,
i am from port:8763