springcloud基本组件(三),引入声明式调用远程方法Feign

springcloud基本组件(一)springcloud基本组件(二)的基础之上,引入Feign

注:图中应该是消费工程

1,修改通用工程

       1,新增依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

       2,创建远程调用接口

package com.dwsoft.myspringcloud.api;

import com.dwsoft.myspringcloud.entity.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * @author tlk
 * @date 2020/7/14-9:50
 */
@Component    //按道理不加这个注解也可以,但是在DoUserController.java中没法注入,加上也不影响
@FeignClient("my-springcloud-provider") //指定服务名称
public interface UserRemoteService {
    @RequestMapping("/provider/get/user/by/id")
    public User getUserById(@RequestParam("userId") Integer userId);
}

2,修改消费工程

   1,主启动类增加注解 @EnableFeignClients

package com.dwsoft.myspringcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * @author tlk
 * @date 2020/7/13-14:50
 */
@EnableFeignClients  //启用 Feign 客户端功能
@SpringBootApplication
public class ConsumerMain {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerMain.class,args);
    }
}

2,控制类增加远程调用方法@RequestMapping("/consumer/get/user/by/id"),全部代码:

package com.dwsoft.myspringcloud.controller;

import com.dwsoft.myspringcloud.api.UserRemoteService;
import com.dwsoft.myspringcloud.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * @author tlk
 * @date 2020/7/13-14:56
 */
@RestController
public class DoUserController {
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private UserRemoteService userRemoteService;
    @RequestMapping("/consumer/get/user")
    public User getUser() {
        String host = "http://my-springcloud-provider";//服务提供工程的配置文件
        String url="/provider/get/user";      //服务提供工程的controller
        return restTemplate.getForObject(host+url,User.class);
    }

    @RequestMapping("/consumer/get/user/by/id")
    public User getUserById(@RequestParam("userId") Integer userId) {
        return userRemoteService.getUserById(userId);
    }


}

3,改造提供服务工程

1,控制类中增加远程调用的方法,供消费者调用

package com.dwsoft.myspringcloud.controller;

import com.dwsoft.myspringcloud.entity.User;
import org.springframework.http.HttpRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

/**
 * @author tlk
 * @date 2020/7/13-14:40
 */
@RestController
public class UserController {

    @RequestMapping("/provider/get/user")
    public User getUser(HttpServletRequest httpServletRequest){
        int serverPort = httpServletRequest.getServerPort();

        return new User(123,"小明 端口号"+serverPort,"123@qq.com");
    }

    @RequestMapping("/provider/get/user/by/id")
    public User getUserById(@RequestParam("userId") Integer userId){

        return new User(userId,"小明 接收到的id"+userId,"123@qq.com");
    }
}

4,启动相关服务,测试

 

 

声明式调用远程方法Feign测试成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值