SpringBoot开启注册发现并使用feign进行远程调用

发布时间 2023-12-17 19:13:57作者: ccblblog

1、安装nacos服务端

nacos下载地址
https://github.com/alibaba/nacos/releases

下载nacos之后解压并启动

image

Nacos默认端口是8848

image

2、配置maven坐标信息

2.1 配置坐标管理

<dependencyManagement>
   <dependencies>
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-alibaba-dependencies</artifactId>
          <version>2.1.0.RELEASE</version>
          <type>pom</type>
          <scope>import</scope>
      </dependency>
   </dependencies>
</dependencyManagement>

2.2 配置nacos坐标

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.3 配置nacos服务地址

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
# 服务名称
  application:
     name: gulimall-coupon

2.4 配置开启注册发现

使用@EnableDiscoveryClient 注解开启注册发现

image

2.5 启动项目

image

2.6 浏览器输入 http://127.0.0.1:8848/nacos

输入用户名和密码 nacos/nacos,可以发现服务都注册上去了

image

3、开启远程调用

比如会员服务调用优惠券服务

3.1 配置远程访问依赖管理坐标

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

3.2 配置openfeign坐标

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

3.3 编写对应的远程访问接口包

注意远程调用的接口的方法签名要写完整的签名,例如:/coupon/coupon/member/list

@FeignClient("gulimall-coupon")
@SuppressWarnings("all")
public interface CouponFeignService {
    @RequestMapping("/coupon/coupon/member/list")
    public R getMemberCoupons();
}

image

3.4 开启远程调用并配置远程调用扫描的包

@EnableFeignClients 注解里边的basePackages参数指定需要进行扫描的包

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = {"com.cc.gulimall.member.feign"})
public class GulimallMemberApplication {
    public static void main(String[] args) {
        SpringApplication.run(GulimallMemberApplication.class, args);
    }
}

image

3.5 远程调用原始接口(优惠卷服务)

@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
    @Autowired
    private CouponService couponService;
    @RequestMapping("/member/list")
    public R getMemberCoupons() {
        CouponEntity couponEntity = new CouponEntity();
        couponEntity.setCouponName("满100减10");
        couponEntity.setNote("xxxx");
        return R.ok().put("coupons",Arrays.asList(couponEntity));
    }

image

3.6 浏览器访问 http://localhost:8000/member/member/coupons

说明调用成功
image