いくつかのサービス消費のアリババ・nacos--サポートをspringcloud--

「春の雲アリババ基本チュートリアル:ナコスはサービス登録と発見、実現使用」研究のテキストを、我々は、登録と発見サービスを実現するためにナコスを使用するだけでなく、LoadBalancerClientインタフェースを介してサービスを取得する方法の具体例を紹介する方法を学びましたそして消費者情報のための例示的インターフェースに応じて、サービス要求を開始します。しかし、このアプローチは、開発者のためのステッチやその他の面倒な作業をリンクし、手でサービス選択を書くために私たちを必要と非常に非友好的です。それでは、また消費をサポートする他のどのようなサービスを、私たちはほかに見てみましょう。

使用RestTemplate

前の例では、我々が使用されているRestTemplateサービスの特定のインスタンスへのHTTP要求を開始するのではなく、特定の要求のパスが良くない経験を開発するために、スプライシングによって達成されます。しかし、実際には、春クラウドに拡張さRestTemplate、ほんの少しの構成のために行う、あなたは前に呼び出しを簡素化することができます。

例えば:

@EnableDiscoveryClient 
@SpringBootApplication
パブリッククラスTestApplication { 公共静的ボイドメイン(文字列[]引数){ SpringApplication.run(TestApplication.class、引数)。} SLF4J @ @RestController 静的クラスTestController { @Autowired RestTemplate restTemplate。(@GetMapping "/テスト")公共の文字列のテストを(){ 文字列の結果= restTemplate.getForObject("のhttp://アリババ-ナコス発見サーバ/ハロー名=ディディ?"、String.class)。戻る「戻る:」+結果を、} } @Bean




















@LoadBalanced 公共テンプレート残留残りのテンプレート(){ 戻ります)(新しいテンプレートの休憩を。} }





これは、RestTemplate時間の定義、の増加で見ることができる@LoadBalancedノートができますが、実際に手で縫いサービス名のIPアドレスとポートを直接使用が要求パスを記述するためのサービス・インターフェースを介して、元のホスト部分を、呼び出すとき。リアルタイムコールでは、春の雲要求がインターセプトされ、その後、ロードバランサを介してノードを選択し、ベースの通話サービス名をロードバランシングを実現するために、サービス名、特定のIPアドレスとポートの一部を置き換えます。

この方法については、テキストの末尾に完全なコードサンプル倉庫を表示することができます。このように、原則の実現のために、あなたは私がこの記事の最初の部分を書いた前に参照することができます:春クラウドソースコード解析(2)リボン

Webクライアントを使用してください

Webクライアントが新たスプリング5で導入され、それはRestTemplateの反応性バージョンとして理解することができます。下記の具体的な例として、それは同じ上記RestTemplateコール要求を達成するであろう:

@EnableDiscoveryClient 
@SpringBootApplication
パブリッククラスTestApplication { 公共静的ボイドメイン(文字列[]引数){ SpringApplication.run(TestApplication.class、引数)。} SLF4J @ @RestController 静的クラスTestController { @Autowired プライベートWebClient.Builder webClientBuilder。@GetMapping("/テスト")公衆モノ<ストリング> 試験(){ モノの<string>結果= webClientBuilder.build()に.get().uri(「HTTP:// alibabaの-ナコスディスカバリサーバ/こんにちは!名前=ディディ").retrieve()


















.bodyToMono(String.class)。結果を返します。} } @Beanは@LoadBalanced パブリックWebクライアントを。ビルダーloadBalancedWebClientBuilder (){ (WebClient.builderを返します)。} }











それはWebClient.Builderの追加時間の定義に見ることができます@LoadBalancedコメントを、原則と同じRestTemplate前の時間。完全例えばWebクライアントは、テキストの終わりまでに倉庫に見ることができます。

装うを使用して

RestTemplateとWebクライアントは、上記のツールは、あなたがより簡単に定義し、サービスコンシューマクライアントを使用することができ、それを通してNetflixのOSSのメンバーで、あるここでは、独自のパッケージを春です。ここでまた、含有量が上記と一致しているという結果を達成するための二つの方法を具体的な例を引用:

ステップ1:pom.xmlで信頼openfeignを増加させました。

<依存性> 
<のgroupId> org.springframework.cloud </のgroupId>
<たartifactId>ばねクラウドスタータopenfeign </たartifactId>
</依存>

ステップ2:定義と装う装うクライアントのクライアントを使用しました:

@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
public class TestApplication {

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

@Slf4j
@RestController
static class TestController {

@Autowired
Client client;

@GetMapping("/test")
public String test() {
String result = client.hello("didi");
return "Return : " + result;
}
}


@FeignClient("alibaba-nacos-discovery-server")
interface Client {

@GetMapping("/hello")
String hello(@RequestParam(name = "name") String name);

}

}

这里主要先通过@EnableFeignClients注解开启扫描Spring Cloud Feign客户端的功能;然后又创建一个Feign的客户端接口定义。使用@FeignClient注解来指定这个接口所要调用的服务名称,接口中定义的各个函数使用Spring MVC的注解就可以来绑定服务提供方的REST接口,比如下面就是绑定alibaba-nacos-discovery-server服务的/hello接口的例子。最后,在Controller中,注入了Client接口的实现,并调用hello方法来触发对服务提供方的调用。关于使用Feign的完整例子也可以通过在文末的仓库中查看。

深入思考

如果之前已经用过Spring Cloud的读者,肯定会这样的感受:不论我用的是RestTempalte也好、还是用的WebClient也好,还是用的Feign也好,似乎跟我用不用Nacos没啥关系?我们在之前介绍Eureka和Consul的时候,也都是用同样的方法来实现服务调用的,不是吗?

确实是这样,对于Spring Cloud老手来说,就算我们更换了Nacos作为新的服务注册中心,其实对于我们应用层面的代码是没有影响的。那么为什么Spring Cloud可以带给我们这样的完美编码体验呢?实际上,这完全归功于Spring Cloud Common的封装,由于在服务注册与发现、客户端负载均衡等方面都做了很好的抽象,而上层应用方面依赖的都是这些抽象接口,而非针对某个具体中间件的实现。所以,在Spring Cloud中,我们可以很方便的去切换服务治理方面的中间件。

おすすめ

転載: www.cnblogs.com/ww25/p/11119635.html