Xiaobaiが利用できるSpringCloudマイクロサービス(Hoxton.SR8)(3)Feign | Service Consumers

開始して直接コピーするだけで、マイクロサービスを構築できます(Hoxton.SR8)2020.8.28がリリースされ、SpringCloudによって構築された記事が整理されています。乾物をお見逃しなく

概要

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サービスを閉じる

その結果、サービスが短時間低下し、その後通常に戻ります。

 

3.giteeアドレス

ソースリファレンス

おすすめ

転載: blog.csdn.net/itjavaee/article/details/109065877