使用Springcloud Loadbalancer集成Openfeign报错
报错内容
No qualifying bean of type 'org.springframework.cloud.client.discovery.ReactiveDiscoveryClient' available
application.yml配置文件
server:
port: 8080
spring:
application:
name: consumer-01
cloud:
nacos:
server-addr: localhost:8848
discovery:
namespace: c7ffbcd1-c4d8-425b-b41c-a1077693fa57
group: A_GROUP
loadbalancer:
ribbon:
enabled: false
nacos:
enabled: true
enabled: true
configurations: zone-preference
zone: zone1
hint:
default: myhint
主类
@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class Consumer01Application {
public static void main(String[] args) {
SpringApplication.run(Consumer01Application.class, args);
}
}
Openfeign controller(前端调用这个接口)
@RestController
public class OpenFeignController {
@Autowired
private FeignEchoService echoService;
@GetMapping("/feign/echo/{message}")
public String feignEcho(@PathVariable String message) {
return echoService.echo(message);
}
}
FeignEchoService配置,我的服务是provider-01,有三个实例
@LoadBalancerClient(name = "provider-01", configuration = CustomLoadBalancerConfig.class)
@FeignClient(value = "provider-01") // 指向服务提供者应用
public interface FeignEchoService {
@LoadBalanced
@GetMapping("/echo/{message}")
String echo(@PathVariable("message") String message);
}
自定义的负载均衡配置,添加下面这个bean就会报错,不添加就正常运行,但是这样我没办法配置zone和hint
public class CustomLoadBalancerConfig {
// 随机负载均衡
@Bean
ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) {
String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
}
// 配置zone
@Bean
public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier(ConfigurableApplicationContext context) {
return ServiceInstanceListSupplier.builder().withDiscoveryClient().withZonePreference().withCaching().build(context);
}
}
provider-01的application.yml
server:
port: 8081
spring:
application:
name: provider-01
cloud:
nacos:
server-addr: localhost:8848
discovery:
namespace: c7ffbcd1-c4d8-425b-b41c-a1077693fa57
group: A_GROUP
metadata:
zone: zone1
hint: myhint
loadbalancer:
ribbon:
enabled: false
nacos:
enabled: false
enabled: true
configurations: zone-preference
provider-01的controller
@RestController
public class EchoServiceController {
@GetMapping("/echo/{message}")
public String echo(@PathVariable String message) {
return message;
}
}