4. springcloud マイクロサービス アーキテクチャによって構築された「springboot 統合型 openFeign」

 1. springcloud マイクロサービス アーキテクチャで構築された「Redis の springboot 自動アセンブリ」

2. springcloud マイクロサービス アーキテクチャによって構築された「springboot 統合 nacos 登録センター」

3. springcloud マイクロサービス アーキテクチャによって構築された「springboot 自動アセンブリ リボン」

この記事は前の記事と 統合されています。偽のインターフェイス呼び出しは、実際にはリボンを通じて実装された負荷であるため、質問がある場合は、前の記事と一緒に読んでください。

目次

1.feignconfig の設定

2. feignConfig、spring.factories の自動アセンブル

3. 起動クラス設定 FeignClient

4. テスト デモの作成を開始する

        4.1 新しい偽クライアントを作成する

        4.2 インターフェイス サービス クラスの実装

        4.3 インターフェース呼び出し


1.feignconfig の設定

package lilock.cn.common.ribbon.config;

import feign.Retryer;
import lilock.cn.common.ribbon.properties.RestTemplateProperties;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;

import java.util.concurrent.TimeUnit;

@EnableConfigurationProperties
public class FeignConfig {

    @Bean
    @Primary
    @ConditionalOnMissingBean
    public Retryer feignRetryer(RestTemplateProperties restTemplateProperties){
        /** 默认重试机制
         * period: 重试间隔时间
         * duration: 时间单位
         * maxAttempts: 最大重试次数
         */
        return new Retryer.Default(100L, TimeUnit.SECONDS.toMillis(1L), restTemplateProperties.getMaxAutoRetries());
    }
}

2. feignConfig、spring.factories の自動アセンブル

org.springframework.boot.autoconfigure.EnableAutoConfiguration = \
lilock.cn.common.ribbon.properties.RestTemplateProperties,\
lilock.cn.common.ribbon.config.RibbonConfig,\
lilock.cn.common.ribbon.config.FeignConfig

3. 起動クラス設定 FeignClient

注: @EnableFeignClients(basePackages = {"lilock.cn"}) この feignClient パッケージ スキャンを追加する必要があります。そうしないと、クライアントに対応する Bean が見つからないというメッセージが表示されます。

package lilock.cn.cms;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication(scanBasePackages = {"lilock.cn"})
@EnableDiscoveryClient
@EnableConfigurationProperties
@EnableFeignClients(basePackages = {"lilock.cn"}) //启用feign调用
public class CmsApplication {

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

4. テスト デモの作成を開始する

        4.1 新しい偽クライアントを作成する

@FeignClient 注釈の値は、リモート サービス呼び出しの applicationName を示します。これは、サービス名に 1 つずつ対応している必要があります。そうしないと、リモートで呼び出すときにリボンが呼び出し元インターフェイスのアドレスを見つけられません。

@FeignClient アノテーションの構成は、FeignConfig で再試行戦略のみが構成されているため、FeignConfig.class を構成します。

package lilock.cn.cms.api;

import lilock.cn.common.ribbon.config.FeignConfig;
import lilock.cn.common.ribbon.constant.ApplicationServiceConstants;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;


@FeignClient(value = ApplicationServiceConstants.LILOCK_CMS_WEB,configuration = {FeignConfig.class})
public interface ApiCmsServiceFeignClient {

    /**
     * 获取字符串
     * @return
     */
    @GetMapping("/api/hello")
    String getHello();
}

        4.2 インターフェイス サービス クラスの実装

package lilock.cn.cms.controller.feign;

import lilock.cn.cms.api.ApiCmsServiceFeignClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class CmsServiceFeignController implements ApiCmsServiceFeignClient {
   
    @Value("${server.port}")
    private Integer port;
    @Value("${spring.application.name}")
    private String service;

    @Override
    public String getHello(){
        return "feign ["+ service +"]点前服务端口号是:["+ port +"]返回内容 HELLO" ;
    }
}

        4.3 インターフェース呼び出し

package lilock.cn.user.controller;

import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import lilock.cn.cms.api.ApiCmsServiceFeignClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


import javax.annotation.Resource;

@RestController
@RequestMapping(path = "/user")
@Api(value = "系统用户",tags = {"系统用户"})
@Slf4j
public class UserController {

   
    @Autowired
    private ApiCmsServiceFeignClient apiCmsServiceFeignClient;

    @GetMapping("/testFeign")
    public String testFeign(){
        String value = apiCmsServiceFeignClient.getHello();
        log.info("[testFeign] 获取当前请求结果:{}",value);
        return value;
    }
}

結果を返す

Guess you like

Origin blog.csdn.net/u011291990/article/details/129562419