インターフェースを呼び出すいくつかの方法:RestTemplateおよびfeign

RestTemplate:

まず、プロジェクトのコントローラーにインターフェースを記述します。
ここに画像の説明を挿入
彼のアプリケーション名はserverです。

spring:
  application:
    name: server

しかし実際には、eurekaを開いたときに表示されるものはSERVERで大文字になっています。

。。。。。。。。。。。。。

2番目のプロジェクトを開く:最初のプロジェクトでインターフェースを呼び出す
最初の方法:直接呼び出す

       RestTemplate restTemplate=new RestTemplate();
        String msg=restTemplate.getForObject("http://localhost:8080/server/msg",String.class);
       log.info("msg:{}",msg);

2番目の方法:LoadBalanceClientを使用します。
相手が複数のプロジェクトを開いてクラスターに参加している場合は、クライアントのデフォルトのポーリング方法であるLoadBalanceClientを使用して、呼び出す方法を1つ選択します。ここでの意味は、このアプリケーションの名前を付けることです。複数のアプリケーション(ここではSERVERアプリケーションを意味します。これは私のプロジェクトを意味します)を開くと、アプリケーションが1つ選択されます。getHostとgetPortを使用して、どちらが指定したかを確認し、RestTemplateで呼び出します。

        ServiceInstance serviceInstance=loadBalancerClient.choose("SERVER");
      String url= String.format("http://%s:%s/server/msg",serviceInstance.getHost(),serviceInstance.getPort());
        RestTemplate restTemplate=new RestTemplate();
        String msg=restTemplate.getForObject(url,String.class);
        log.info("msg:{}",msg);

3番目のメソッド:2番目のメソッドの単純な処理:
ここではRestTemplateの処理、次に春の処理へ:
ここに画像の説明を挿入
コントローラーで呼び出すことができます:
最初にrestTemplateを注入します

@Resource
    private RestTemplate restTemplate;

次に電話してください:

        String msg=restTemplate.getForObject("http://SERVER/server/msg",String.class);
        log.info("msg:{}",msg);

ホストとポートは、アプリケーション名(SERVER)に直接変更できます。
ここに画像の説明を挿入
簡単に@Beanアノテーションと@Resource
@Beanはxmlと同等です

@Resourceが注入されるとき、名前はプロパティの名前であり、クラスではありません。
ここでは、BeanとしてSpringに与えた
ここに画像の説明を挿入
ので、ここでメンバープロパティを定義するときに、同じ名前を記述する必要があります。ここに画像の説明を挿入

feign:

依存関係:ここは非常によくわかります。バージョンによって異なります。私はここが新しいです。古いmavenを使用すると、赤い依存関係が表示されます。ここにアップグレードされた依存関係があります:非常に完全:[アップグレードされた依存関係]、(https:// zhuanlan。 zhihu.com/p/111927645)

  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

スタートアップクラスの注釈:@EnableFeignClients

apiを呼び出すインターフェイスクラスを記述します(ここにピットがあります!インターフェイスクラスの名前をFeignClientに設定しないでください。これはFeignClient自体と同じ名前です。エラーが発生します!!!)

@FeignClient(name = "server")
public interface Client  {
    @GetMapping("/server/msg")
  String msg();
    @GetMapping("/server/category")
    List<ProductCategory> category();

}

@FeignClient(name = "server")はアプリケーション名を指定するため、プロジェクトはサーバーに設定されます。
次に、プロジェクト1で構成されたコントローラーの@RequestMappingがあります。
次に、コントローラーに書き込んだばかりのインターフェイスを挿入します
ここに画像の説明を挿入
。feignを使用してインターフェイスを呼び出しますここに画像の説明を挿入

56件のオリジナル記事を公開 Like1 Visits1509

おすすめ

転載: blog.csdn.net/weixin_44841849/article/details/105405099