美文网首页
houyi平台-开发指南-RPC配置

houyi平台-开发指南-RPC配置

作者: do_young | 来源:发表于2020-01-19 17:13 被阅读0次

说明

平台使用Feign实现微服务之间的RPC调用。
相关配置与开发流程如下

开发

下面是开发rpc客户端的相关步骤

开发RPC调用客户端类

在提供服务的工程中创建.fegin.的子包路径,如下图所示:

image.png

在包路径中创建调用服务的客户端类,并基于fegin相关注解开发接口调用代码:

package com.houyi.servicea.feign;

import java.util.Map;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.houyi.common.model.PageResult;
import com.houyi.common.model.Result;
import com.houyi.servicea.feign.fallback.DemoDomainServiceFallbackFactory;
import com.houyi.servicea.model.DemoDomain;

@FeignClient(name = ServiceNameConstants.SERVICE_SAMPLE_A, fallbackFactory = DemoDomainServiceFallbackFactory.class, decode404 = true)
public interface DemoDomainService {
    @GetMapping(value = "/demodomain", params = "params")
    PageResult<DemoDomain> list(@RequestParam("params") Map<String, Object> params);

    @GetMapping(value = "/demodomain/{id}")
    public Result<DemoDomain> findUserById(@PathVariable("id") Long id);

    @PostMapping(value = "/demodomain", params = "demoDomain")
    public Result save(@RequestParam("demoDomain") DemoDomain demoDomain);

    @DeleteMapping(value = "/demodomain/{id}")
    public Result delete(@PathVariable("id") Long id);
}

编写降级服务实现

当调用的服务下线或者服务触发了熔断,限流的阀值。将会对服务做降级处理。
为了提高服务质量,需要编写服务降级的工厂类,并配置在@FeignClient注解的fallbackFactory属性中。

package com.houyi.servicea.feign.fallback;

import java.util.Map;
import org.springframework.stereotype.Component;
import com.houyi.common.model.PageResult;
import com.houyi.common.model.Result;
import com.houyi.servicea.feign.DemoDomainService;
import com.houyi.servicea.model.DemoDomain;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Component
public class DemoDomainServiceFallbackFactory implements FallbackFactory<DemoDomainService> {
    @Override
    public DemoDomainService create(Throwable throwable) {
        return new DemoDomainService() {
            @Override
            public PageResult<DemoDomain> list(Map<String, Object> params) {
                log.error("通过翻页信息查询DemoDomain异常:{}", params, throwable);
                return new PageResult<DemoDomain>();
            }
            @Override
            public Result<DemoDomain> findUserById(Long id) {
                log.error("通过用户ID信息查询DemoDomain异常:{}", id, throwable);
                return new Result<DemoDomain>();
            }
            @Override
            public Result save(DemoDomain demoDomain) {
                log.error("创建DemoDomain对象异常:{}", demoDomain, throwable);
                return new Result();
            }

            @Override
            public Result delete(Long id) {
                log.error("通过用户ID删除DemoDomain异常:{}", id, throwable);
                return new Result();
            }
        };
        
    }
}

使用RPC客户端组件

导入RPC客户端组件

服务工程会由maven的插件,为工程生成一个针对客户端调用的jar包。

            <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <executions>
                    <execution>
                        <id>client</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <phase>package</phase>
                        <configuration>
                            <classifier>client</classifier>
                            <includes>
                                <include>**/model/**</include>
                                <include>**/feign/**</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

所以在引入服务调用客户端的组件包时,需要配置classifier参数:

        <dependency>
            <groupId>com.houyi.saas.projectsample</groupId>
            <artifactId>service-sample-a</artifactId>
            <classifier>client</classifier>
        </dependency>

确认引入平台的RPC组件包

            <dependency>
                <groupId>com.houyi.saas</groupId>
                <artifactId>ribbon-spring-boot-starter</artifactId>
            </dependency>

确认配置工程下的RPC相关配置

##### feign配置
feign.sentinel.enabled=true
feign.hystrix.enabled=false
feign.okhttp.enabled=true
feign.httpclient.enabled=false
feign.client.config.feignName.connectTimeout=30000
feign.client.config.feignName.readTimeout=30000
## 开启Feign请求响应压缩
feign.compression.request.enabled=true
feign.compression.response.enabled=true
## 配置压缩文档类型及最小压缩的文档大小
feign.compression.request.mime-types=text/xml,application/xml,application/json
feign.compression.request.min-request-size=2048

开启工程RPC调用功能

在SpringBoot的启动类上配置@FeignClients注解,开启RPC调用功能。

@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
@EnableTransactionManagement
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

注入RPC调用组件

    @Resource
    private DemoDomainService demoDomainService;
    /**
     * 列表
     */
    @ApiOperation(value = "查询列表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "page", value = "分页起始位置", required = true, dataType = "Integer"),
            @ApiImplicitParam(name = "limit", value = "分页结束位置", required = true, dataType = "Integer")
    })
    @GetMapping("/demodomain")
    public PageResult<DemoDomain> list(@RequestParam Map<String, Object> params) {
        return demoDomainService.list(params);
    }

相关文章

网友评论

      本文标题:houyi平台-开发指南-RPC配置

      本文链接:https://www.haomeiwen.com/subject/lforzctx.html