SpringCloudAlibaba - RPC remote call OpenFeign

OpenFeign is a declarative Http Web client calls tool that provides an interface in the form of notes and calls. Development of micro-services, will inevitably need to call room service. Spring Cloud framework provides two ways to complete RestTemplate and FeignClient between service calls, this article briefly describes how to use OpenFeign completed between service calls, you can start to integrate:

First, based on the polymerization IDEA established maven items below:

Which, springcloud-alibaba-parent is the father of the project, to store some co-dependent, service-api, Service-impl is springcloud-alibaba-parent of the module sub-module, service-api-Member, service-api-the Order is a service-api 's module sub-module, service-impl-Member, service-impl-Order is a service-impl the module sub-module.

  In springcloud-alibaba-parent incorporated as a common dependency:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.xyy</groupId>
    <artifactId>springcloud-alibaba-parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>service-api</module>
        <module>service-impl</module>
    </modules>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
    </parent>

    <dependencies>
        <!--  springboot 整合web组件-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>0.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>
    </dependencies>

</project>

  service-impl-member dependent follows:

<dependencies>
    <dependency>
        <groupId>com.xyy</groupId>
        <artifactId>service-api-member</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

  service-impl-order dependence follows:

<dependencies>
    <dependency>
        <groupId>com.xyy</groupId>
        <artifactId>service-api-member</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.xyy</groupId>
        <artifactId>service-api-order</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

  service-impl-member profile is as follows:

spring:
  application:
    # 服务名称
    name: service-member
  cloud:
    nacos:
      discovery:
        # nacos注册地址
        server-addr: 127.0.0.1:8848
server:
  port: 8081

  service-impl-order profile as follows:

spring:
  application:
    # 服务名称
    name: service-order
  cloud:
    nacos:
      discovery:
        # nacos注册地址
        server-addr: 127.0.0.1:8848
server:
  port: 8090

  In the service-api-member write Member Services:

package com.xyy;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

public interface MemberService {
    /**
     * 提供我们发布的接口
     * @param userId
     * @return
     */
    @GetMapping("/getUser")
    String getUser(@RequestParam("userId") Integer userId);
}

  In the service-impl-member write an implementation class:

package com.xyy.impl;

import com.xyy.MemberService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MemberServiceImpl implements MemberService {
    @Value("${server.port}")
    private String serverPort;

    @Override
    public String getUser(Integer userId) {
        return "我是会员服务" + serverPort;
    }
}

In the service-impl-order write openFeign client (direct implementation of Member Services interface can):

package com.xyy.openfeign;

import com.xyy.MemberService;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;


@FeignClient("service-member")
public interface MemberServiceFeign extends MemberService {

}

  In the service-impl-order written order fulfillment:

package com.xyy.impl;

import com.xyy.openfeign.MemberServiceFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class OrderService {
    @Autowired
    private MemberServiceFeign memberServiceFeign;
    /**
     * 基于我们的feign客户端形式实现rpc远程调用
     * @return
     */
    @RequestMapping("/orderFeignToMember")
    public String orderFeignToMember() {
        String result = memberServiceFeign.getUser(1);
        return "我是订单服务调用会员服务的接口,返回结果" + result;
    }
}

Each start service-impl-member (8080) , service-impl-member (8081), service-impl-order (8090), direct request orderFeignToMember interfaces, will find the bottom of the package the default client-side load balancing Ribbon:

    

【summary】:

·   Orders transfer member when the members of the service interface method parameters, be sure to add @RequestParam notes, orders can not be added.

·   Name in the micro-service architecture Nacos service name can not be underlined (service_order wrong wording, when openfeign call error).

Published 45 original articles · won praise 20 · views 30000 +

Guess you like

Origin blog.csdn.net/AkiraNicky/article/details/104061517