開始して直接コピーするだけで、マイクロサービスを構築できます(Hoxton.SR8)2020.8.28がリリースされ、SpringCloudによって構築された記事が整理されています。乾物をお見逃しなく
-
SpringCloudマイクロサービスはXiaobai(Hoxton.SR8)でも使用できます(1)Eureka |サービスの登録と検出
-
Xiaobaiが利用できるSpringCloudマイクロサービス(Hoxton.SR8)(3)Feign | Service Consumers
-
SpringCloudマイクロサービスXiaobaiも利用できます(Hoxton.SR8)(4)Hystrix | Circuit Breaker
-
SpringCloudマイクロサービスXiaobaiも利用できます(Hoxton.SR8)(5)ダッシュボード/タービン|サーキットブレーカーモニタリング
-
SpringCloudホワイトマイクロサービスは(Hoxton.SR8)(6)Zuul | Services Gateway
-
SpringCloudホワイトマイクロサービスは(Hoxton.SR8)(7)ゲートウェイ|サービスゲートウェイを取ることができます
-
SpringCloudホワイトマイクロサービスは(Hoxton.SR8)(8)Sleuth | Link TrackingServiceを利用できます
概要
Spring Cloud OpenFeignは、RibbonとHystrixを統合し、負荷分散機能とサービス障害耐性機能を備えた宣言型サービス呼び出しツールです。Feignは宣言型のサービス呼び出しツールです。インターフェイスを作成し、注釈を付けて構成してサービスインターフェイスを呼び出すだけで済みます。これにより、RestTemplateを直接使用してサービスインターフェイスを呼び出す開発の量が簡素化されます。Feignには、プラグ可能な注釈のサポートに加えて、Feign注釈、JAX-RS注釈、およびSpringMvc注釈があります。Feignを使用する場合、Spring CloudはRibbonとEurekaを統合して、負荷分散されたサービス呼び出しとHystrixベースのサービス障害耐性保護を提供します。
1.偽のサービスモジュールを作成します
注:構成と構築については、前の記事(1)のクライアント構成を参照してください。
1.1pom.xmlは偽の依存関係を追加します
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
1.2スタートアップクラスに@EnableFeignClientsを追加しました
package com.zqh.www;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.core.env.Environment;
/**
* 开启feign
*/
@EnableFeignClients
@EnableEurekaClient
@SpringBootApplication
public class FeignServiceApplication {
private final static Logger logger = LoggerFactory.getLogger(FeignServiceApplication.class);
public static void main(String[] args) {
Environment env = SpringApplication.run(FeignServiceApplication.class, args).getEnvironment();
logger.info(
"\n----------------------------------------------------------\n\t"
+ "Application '{}' is running! Access URLs:\n\t"
+ "Local: \t\thttp://localhost:{}{}"
+ "\n----------------------------------------------------------",
env.getProperty("spring.application.name"), env.getProperty("server.port"),
env.getProperty("server.servlet.context-path") != null ? env.getProperty("server.servlet.context-path") : "");
}
}
1.3偽の消費者サービスを作成する
package com.zqh.www.service;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.Map;
@FeignClient(value = "user-service", fallback = UserFallbackService.class)
public interface IUserService {
@GetMapping("/api/user/getUserList")
Map<String, Object> getUserList();
// 不同传参方式样例
// JSON格式传参
// @PostMapping("/user/save")
// Map<String, Object> save(@RequestBody User user);
// 路径传参
// @GetMapping("/user/{id}")
// Map<String, Object> getUser(@PathVariable Long id);
// 表单传参
// @GetMapping("/user/listUsersByIds")
// Map<String, Object> listUsersByIds(@RequestParam List<Long> ids);
// 表单传参
// @GetMapping("/user/getUserByUsername")
// Result<User> getUserByUsername(@RequestParam String username);
}
1.4サーキットブレーカークラスを作成する
package com.zqh.www.service;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
* 降级处理类
*/
@Component
public class UserFallbackService implements IUserService {
@Override
public Map<String, Object> getUserList() {
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("code", "500");
resultMap.put("msg", "调用失败,服务被降级");
resultMap.put("data", null);
return resultMap;
}
}
1.5コントローラーテストコールを作成する
package com.zqh.www.controller;
import com.zqh.www.service.IUserService;
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 java.util.Map;
@RestController
@RequestMapping("/api/feign")
public class FeignController {
@Autowired
private IUserService userService;
@GetMapping("/getUserList")
public Map<String, Object> getUserList() {
return userService.getUserList();
}
}
1.6 yml openfeignの一般的な構成とログ
server:
port: 8087
spring:
application:
name: feign-service
eureka:
client:
service-url:
#注册地址
defaultZone: http://root:root@localhost:8081/eureka/
#显示服务器IP加端口
instance:
hostname: localhost
prefer-ip-address: true
instance-id: ${spring.cloud.client.ip-address}:${server.port}
#feign常用配置
feign:
hystrix:
#在Feign中开启Hystrix
enabled: true
compression:
request:
#是否对请求进行GZIP压缩
enabled: false
#指定压缩的请求数据类型
mime-types: text/xml,application/xml,application/json
#超过该大小的请求会被压缩
min-request-size: 2048
response:
enabled: false #是否对响应进行GZIP压缩
# 配置feign日志级别
logging:
level:
com.jourwon.springcloud.service: debug
2.テスト
2.1通常のテスト
2.2ロードサービステスト
2.3サービスを閉じる
その結果、サービスが短時間低下し、その後通常に戻ります。