1. springcloud マイクロサービス アーキテクチャで構築された「Redis の springboot 自動アセンブリ」
2. springcloud マイクロサービス アーキテクチャによって構築された「springboot 統合 nacos 登録センター」
3. springcloud マイクロサービス アーキテクチャによって構築された「springboot 自動アセンブリ リボン」
この記事は前の記事と 統合されています。偽のインターフェイス呼び出しは、実際にはリボンを通じて実装された負荷であるため、質問がある場合は、前の記事と一緒に読んでください。
目次
2. feignConfig、spring.factories の自動アセンブル
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;
}
}
結果を返す