服务消费者整合 OpenFeign ===> 启动类中要添加 @EnableFeignClients 注解

服务消费者整合 OpenFeign ===> 启动类中要添加 @EnableFeignClients 注解

package com.llq.springcloud;
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableDiscoveryClient  //  启用服务发现
@EnableFeignClients
public class MemberNacosConsumerApplication81 {
    public static void main(String[] args) {
        ApplicationContext ac = SpringApplication.run(MemberNacosConsumerApplication81.class, args);
    }
}

架构图:

springcloud
├─ MemberNacosConsumerApplication81.java
├─ config
│    ├─ CustomizationBean.java
│    └─ RibbonRule.java
├─ controller
│    └─ MemberNacosConsumerController.java
└─ service
       └─ MemberOpenFeignService.java	# member-service-nacos-consumer-81 消费者整合 openFeign	

member-service-nacos-consumer-81 消费者整合 openFeign

package com.llq.springcloud.service;

@FeignClient(value = "member-service-nacos-provider")   //  value:服务名称
public interface MemberOpenFeignService {
    /**
     * 解读
     * 1. 远程调用方式是 get
     * 2. 远程调用的 url 是 http://member-service-nacos-provider/member/get/{id}
     * 3. member-service-nacos-provider 是 nacos 注册中心服务名
     * 4. open-feign 会根据负载均衡算法来决定调用的是 10004 / 10006
     * 5. OpenFeign 通过接口方式调用服务
     */
    @GetMapping(value = "/member/get/{id}")
    public Result<Member> getMembfeById(@PathVariable("id") Long id);
}

服务 10004【服务名字 member-service-nacos-provider:服务名相同的构成集群】

# 注意格式:如果没有缩进的话,SpringBoot项目起不来!!!
server:
  port: 10004
spring:
  application:
    name: member-service-nacos-provider #名称,可以自己指定
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/e_commerce_center_db?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 352420kobe24llq
   # 配置 nacos
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    # 配置 sentinel
#    sentinel:
#      transport:
#        dashboard: localhost:9999
#        port: 8888
  # 配置暴露所有监控点
#management:
#  endpoints:
#    web:
#      exposure:
#        include: '*'

mybatis:
  mapperLocations: classpath:mapper/*.xml #后面mapper 文件的位置
  type-aliases-package: com.llq.springcloud.entity # 实体类的包路径

调用的方法

@GetMapping("/member/get/{id}")
  public Result getMemberById(@PathVariable("id") Long id, HttpServletRequest request) {
      Member member = memberService.queryMemberById(id);
      // try {
      //     Thread.sleep(1000);
      // } catch (InterruptedException e) {
      //     e.printStackTrace();
      // }
      System.out.println("当前线程id 为:" + Thread.currentThread().getId());
      log.info("查询结果= " + member);
      if (member != null) {
          return Result.success("查询成功 member-service-nacos-provider-10004", member);
      } else {
          return Result.error("402", "ID= " + id + " 不存在");
      }
  }

服务 10006【服务名字 member-service-nacos-provider:服务名相同的构成集群】

# 注意格式:如果没有缩进的话,SpringBoot项目起不来!!!
server:
  port: 10006
spring:
  application:
    name: member-service-nacos-provider #名称,可以自己指定
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/e_commerce_center_db?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 352420kobe24llq
   # 配置 nacos
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
 # 配置暴露所有监控点
#management:
#  endpoints:
#    web:
#      exposure:
#        include: '*'

mybatis:
  mapperLocations: classpath:mapper/*.xml #后面mapper 文件的位置
  type-aliases-package: com.llq.springcloud.entity # 实体类的包路径

调用方法

   @GetMapping(value = "/member/get/{id}")
  public Result getMemberById(@PathVariable("id") Long id) {
      Member member = memberService.queryMemberById(id);
      log.info("查询结果= " + member);
      if (member != null) {
          return Result.success("查询成功 member-service-nacos-provider-10006", member);
      } else {
          return Result.error("402", "ID= " + id + " 不存在");
      }
  }

OpenFeign 通过接口方式调用远程程序


在 Controller 中装配 MemberOpenFeignService

//  装配 memberOpenFeignService
@Resource
private MemberOpenFeignService memberOpenFeignService;

//  编写方法,通过 openFeign 实现远程调用
@GetMapping("/member/openfeign/consumer/get/{id}")
public Result<Member> getMemberOpenFeignById(@PathVariable("id") long id){
    //  这里我们使用 openfeign 接口方式远程调用
    log.info("调用方式是 openFeign");
    return memberOpenFeignService.getMemberById(id);
}

修改 openFeign 负载均衡算法

springcloud
├─ MemberNacosConsumerApplication81.java
├─ config
│    ├─ CustomizationBean.java
│    └─ RibbonRule.java   # 修改负载均衡算法
├─ controller
│    └─ MemberNacosConsumerController.java
└─ service
       └─ MemberOpenFeignService.java 

修改负载均衡算法

  • 默认是轮询算法
  • 配置 RibbonRule修改成其它算法
package com.llq.springcloud.config;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration  //  配置自己的负载均衡算法
public class RibbonRule {
    @Bean
    public IRule myRibbonRule(){
        return new RandomRule();    //  随机负载均衡算法
    }
}
posted @   爱新觉罗LQ  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示