FeignClient如何脱离eureka自定义URL

2022-11-13 11:11:00 自定义 脱离 FeignClient

FeignClient脱离eureka自定义URL

需求

spring cloud环境中的FeignClient有时候需要调用特定主机的接口,但是默认是从eureka上的注册列表自动获取到的负载均衡过后的URL,这时怎么办呢?

方法一: FeignClient注解中添加URL属性

如果本地可以编译参照的FeignClient源码,可以直接修改,如果参照的是jar包,则可以另外自己做一个FeignClient,主要是要指定url属性:

@FeignClient(name = "test-service", path = "/test", url="Http://localhost:8000")
public interface TestFeignClient{
    @GetMapping(value = "/test1")
    String test1();

方法二: eureka禁用ribbon,并手动配置服务列表

设置 ribbon.eureka.enable = false

自定义接口的服务地址

ribbon:
  eureka:
    enabled: false
test-service:
  ribbon:
    listOfServers: http://localhost:8000

注意

方法二的设置会导致所有FeignClient都需要在配置文件中自定义服务地址,

如果需要特定指定的服务URL并不多的话,推荐使用方法一。

另外,如果项目本身就不需要eureka,推荐方法二,因为url可以指定多个,来实现一定的负载均衡。 

feign不使用eureka

main

@EnableFeignClients
@SpringBootApplication
public class FeignMain {
    public static void main(String[] args) {
        springApplication.run(FeignMain.class, args);
    }
}

server端代码

server端依旧是用randomInt

@RequestMapping(value = "/getNum", method = RequestMethod.GET)
    public int getRandomInt() {
        Random random = new Random();
        Integer num = random.nextInt(100);
        logger.info("getRandomInt:" + num);
        return num;
    }

Client端代码

@FeignClient(name = "thisOnlyName", url = "http://localhost:10102")
public interface RestFulService {
    
    @RequestMapping(value = "/getNum")
    int getRandomInt();
}

此处通过url直接指定就好了。不需要配置eureka。ribbon也不会生效。单节点个人学习棒棒哒!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

相关文章