sringcloud2.0ラーニング-10-宣言サービスコールSpringCloud Feign
53130 ワード
宣言サービスコールSpringCloud Feign
Springcloudには、RestTemplateを介して次のように呼び出される2つのインタフェース呼び出し方式があります.
個人的には、この方法はインタフェースの呼び出しをビジネスコードと混ぜ合わせ、あまり友好的ではなく、基本的に使わないことを理解しています.もう1つはFeignクライアント呼び出しであり,Feginはインタフェース注釈方式で実現され,読みやすさが強い.
1.Feignの概要
Feignクライアントは、Web宣言httpリモートコールツールであり、インタフェースと注釈方式で呼び出されます.
2.Feignの使用
親プロジェクトを作成し、3つのModule:Eureka Server、memberService、orderServiceを作成し、eureka自己保護をオフにします.
2.1親工事構築
2.2 EurekaServerモジュール構築 pom導入spring-cloud-starter-netflix-eureka-server依存: yaml構成、Eureka自己保護 を閉じる起動クラス@EnableEureakServerオープン登録センター
2.3メンバーサービス構築 pom spring-cloud-starter-netflix-eureka-client依存およびspringboot-webコンポーネント を導入 yamlは登録センタアドレスを構成し、クライアント心拍検出時間 を設定する.起動クラス:@EnableEurekaClient注記を使用してメンバーサービスを登録センター に登録 MemberController
2.4 OrderService構築 pom依存統合Feignクライアントspring-cloud-starter-openfeignおよびspringboot-webコンポーネント プロファイル Feignクライアントインタフェース定義
@FeignClient(value="app-member"),@FeignClientはFeignクライアントを表し,valueの値はクライアントが呼び出すサービスが登録センターにある名前@RequestMapping("/member/getmember")はrpc方式で呼び出すリモートインタフェース/member/getmemberであり,サービスプロバイダが外部に露出したインタフェースFeignClient注釈は本質的には注釈を取得した値を反射して取得し、呼び出すサービスの名前を取得し、登録センターに行ってサービスに対応するアドレス情報を取得し、@RequestMapping注釈の値に基づいてインタフェース呼び出しアドレスを組み立て、最後にHttpClient方式で呼び出すべきであると推測する Controller Controller Controller Controller Controller Controller Controller Controller Controller Controller Controller Controller Controller Controller Controller Controller Controller Controller Controller Controller Controller メイン起動クラス@EnableFeignClients注記を追加してfeignクライアント を有効にする必要があります.
Feignクライアント使用手順まとめ Feignクライアントを使用するプロジェクト統合Feignクライアント Feignクライアントインタフェース定義インタフェースクラス名に注記@FeignClient(value="app-member")を付けてFeignクライアントを宣言し、呼び出すマイクロサービスが登録センターに登録されている名前を指定し、@RequestMapping呼び出すインタフェースメソッドを指定します: Feignクライアントの場所を使用してFeignクライアントインタフェースを注入し、 を呼び出す.起動クラスに@EnableFeignClients注記を追加Feignクライアント を有効にする
現在のFeignクライアント呼び出しの欠点
orderサービスがFeignクライアントを介してmemberサービスの/member/getmemberインタフェースを呼び出すには、orderサービスで同じFeignクライアントインタフェースを定義する必要があり、多くのインタフェースがあれば、このような重複コードが多くなるため、このようなプロジェクトの構成は合理的ではないことがわかります.
ダウンロードコードをクリックしてspringcloud 2を参照してください.0-eureka-selfprotectエンジニアリング
Springcloudには、RestTemplateを介して次のように呼び出される2つのインタフェース呼び出し方式があります.
restTemplate.getForObject("http://app-member/getmember", String.class);
個人的には、この方法はインタフェースの呼び出しをビジネスコードと混ぜ合わせ、あまり友好的ではなく、基本的に使わないことを理解しています.もう1つはFeignクライアント呼び出しであり,Feginはインタフェース注釈方式で実現され,読みやすさが強い.
1.Feignの概要
Feignクライアントは、Web宣言httpリモートコールツールであり、インタフェースと注釈方式で呼び出されます.
2.Feignの使用
親プロジェクトを作成し、3つのModule:Eureka Server、memberService、orderServiceを作成し、eureka自己保護をオフにします.
2.1親工事構築
<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">
<modelVersion>4.0.0modelVersion>
<groupId>com.lchtestgroupId>
<artifactId>springcloud2.0-eureka-selfprotectartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>pompackaging>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.3.RELEASEversion>
parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>Finchley.RELEASEversion>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<modules>
<module>eureka-servermodule>
<module>springcloud2.0-eureka-selfprotect-eurekaservermodule>
<module>springcloud2.0-eureka-selfprotect-ordermodule>
<module>springcloud2.0-eureka-selfprotect-membermodule>
modules>
project>
2.2 EurekaServerモジュール構築
<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">
<modelVersion>4.0.0modelVersion>
<parent>
<groupId>com.lchtestgroupId>
<artifactId>springcloud2.0-eureka-selfprotectartifactId>
<version>0.0.1-SNAPSHOTversion>
parent>
<artifactId>springcloud2.0-eureka-selfprotect-eurekaserverartifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
dependencies>
project>
server:
port: 8100
eureka:
instance:
# ip
hostname: 127.0.0.1
client:
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
#
register-with-eureka: false
fetch-registry: false
server:
# ,
enable-self-preservation: false
#
eviction-interval-timer-in-ms: 2000
package com.lchtest.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
//@EnableEureakServer
@EnableEurekaServer
public class AppEurekaServer {
public static void main(String[] args) {
SpringApplication.run(AppEurekaServer.class, args);
}
}
2.3メンバーサービス構築
<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">
<modelVersion>4.0.0modelVersion>
<parent>
<groupId>com.lchtestgroupId>
<artifactId>springcloud2.0-eureka-selfprotectartifactId>
<version>0.0.1-SNAPSHOTversion>
parent>
<artifactId>springcloud2.0-eureka-selfprotect-memberartifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
dependencies>
project>
#
server:
port: 8070
# --
spring:
application:
name: app-member
eureka:
client:
service-url:
# eureka
defaultZone: http://localhost:8100/eureka/
# , true
register-with-eureka: true
#
fetch-registry: true
# eureka eureka , ,
instance:
# eureka ,
lease-renewal-interval-in-seconds: 1
# eureka , ,
lease-expiration-duration-in-seconds: 2
package com.lchtest.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class AppMember {
public static void main(String[] args) {
SpringApplication.run(AppMember.class, args);
}
}
package com.lchtest.springcloud.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MemberController {
@Value("${server.port}")
private String port;
@RequestMapping("/member/getmember")
public String getMemberByFeign() {
return "member service port=" + port;
}
}
2.4 OrderService構築
<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">
<modelVersion>4.0.0modelVersion>
<parent>
<groupId>com.lchtestgroupId>
<artifactId>springcloud2.0-eureka-selfprotectartifactId>
<version>0.0.1-SNAPSHOTversion>
parent>
<artifactId>springcloud2.0-eureka-selfprotect-orderartifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
dependencies>
project>
#
server:
port: 8001
# --
spring:
application:
name: app-order
eureka:
client:
service-url:
# eureka
defaultZone: http://localhost:8100/eureka/
# , true
register-with-eureka: true
#
fetch-registry: true
# eureka eureka , ,
instance:
# eureka ,
lease-renewal-interval-in-seconds: 1
# eureka , ,
lease-expiration-duration-in-seconds: 2
package com.lchtest.springcloud.feignclient;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* Feign
* @author pc
*/
@FeignClient(value = "app-member")
public interface MemberFeign {
@RequestMapping("/member/getmember")
public String getmember();
}
@FeignClient(value="app-member"),@FeignClientはFeignクライアントを表し,valueの値はクライアントが呼び出すサービスが登録センターにある名前@RequestMapping("/member/getmember")はrpc方式で呼び出すリモートインタフェース/member/getmemberであり,サービスプロバイダが外部に露出したインタフェースFeignClient注釈は本質的には注釈を取得した値を反射して取得し、呼び出すサービスの名前を取得し、登録センターに行ってサービスに対応するアドレス情報を取得し、@RequestMapping注釈の値に基づいてインタフェース呼び出しアドレスを組み立て、最後にHttpClient方式で呼び出すべきであると推測する
package com.lchtest.springcloud.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.lchtest.springcloud.feignclient.MemberFeign;
@RestController
@RequestMapping("/orderfeign")
public class FeignClientTestController {
@Autowired
private MemberFeign memberFeign;
/**
* feign member :http://localhost:8001/orderfeign/getmemberByFeign
* @return
*/
@RequestMapping("/getmemberByFeign")
public String getmember() {
return " Feign member , :" + memberFeign.getmember();
}
}
package com.lchtest.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients // feign
public class AppOrder {
public static void main(String[] args) {
SpringApplication.run(AppOrder.class, args);
}
}
Feignクライアント使用手順まとめ
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
@FeignClient(value = "app-member")
public interface MemberFeign {
@RequestMapping("/member/getmember")
public String getmember();
}
//
@Autowired
private MemberFeign memberFeign;
//
memberFeign.getmember();
現在のFeignクライアント呼び出しの欠点
orderサービスがFeignクライアントを介してmemberサービスの/member/getmemberインタフェースを呼び出すには、orderサービスで同じFeignクライアントインタフェースを定義する必要があり、多くのインタフェースがあれば、このような重複コードが多くなるため、このようなプロジェクトの構成は合理的ではないことがわかります.
ダウンロードコードをクリックしてspringcloud 2を参照してください.0-eureka-selfprotectエンジニアリング