一、配置依赖和yml时遇到的问题
1、pom中有配置中心和注册中心时,需要bootstrap.yml文件,写入配置中心和注册中心配置。
参考博客:https://blog.csdn.net/qq_43659751/article/details/112617561
https://www.cnblogs.com/Lvzx233/p/14180867.html
2、遇到org.apache.catalina.LifecycleException: Protocol handler start failed错误。
因为端口被占用
二、跟eruka一样,使用ribbon作为负载均衡,使用Feign作为服务调用
采用Feign+Ribbon的整合方式,是由Feign完成远程调用的整个流程。而Feign集成了Ribbon,Feign使用Ribbon 完成调用实例的负载均衡。
三、Feignclient无法注入的问题
需要在启动类上加入:
@EnableFeignClients(basePackages = "你@FeignClient注解的类的路径")
四、搭建环境
查看 码云地址:https://gitee.com/liushanshan126/project 中nacos-register项目
五、ribbon
本地案例:多个服务提供者,除了端口号的不同,其他都一样,消费者调用服务者的时候,默认是轮询。
六、服务流量权重支持及流量保护
设置实例的权重
七、熔断器 hystrix (openfeign集成了hystrix)
feign: # 打开熔断器
hystrix:
enabled: true
异常类:
package com.bear.excep;
import com.bear.client.ProvideService;
import org.springframework.stereotype.Component;
/**
* @author LiuShanshan
* @version V1.0
* @Description
*/
@Component
public class ExceptionExcep implements ProvideService{
@Override
public String provideGet() {
System.out.println("调用服务失败,此地方进行处理");
return null;
}
}
@FientClient后面加上属性:
@FeignClient(value = "nacos-provide", fallback = ExceptionExcep.class)
八、@FeignClient属性的含义
参考博客:https://www.cnblogs.com/MrSi/p/14083773.html
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FeignClient {
/**
* 说明:
* 1、value 与 name 互为别名,两者二选一即可
* 2、当 contextId 没有值的时候,会默认获取(value/name)的值
* 3、当未指定 url 请求地址的时候,最终会通过 ribbon-loadbalancer工具,从consul注册节点中选取 service-id 等于 value的服务作为请求地址
* @return
*/
@AliasFor("name")
String value() default "";
/**
* 说明:
* 1、serviceId 已经作废,其目的与 value一致。如果设置了 serviceId,则value/name 皆以 serviceId 为准
*/
/** @deprecated */
@Deprecated
String serviceId() default "";
/**
* 说明:
* 1、当 contextId 没有值的时候,会默认获取(value/name)的值
* 2、当 qualifier 没有值的时候,会将 '${contextId}FeignClient'作为 feign 的bean组件别名
*/
String contextId() default "";
/**
* 说明:同 value, 二选一
*/
@AliasFor("value")
String name() default "";
/**
* 说明:
* 1、feign的bean组件别名,拥有最高优先级;
* 2、当 qualifier 为空时,取 '${contextId}FeignClient' 作为 bean 的名称
*/
String qualifier() default "";
/**
* 说明:
* 1、设置 url 以后,后续发起http调用时,直接读取该地址作为请求目标;
* 2、未设置 url 时,借助 ribbon-loadbalancer 组件,根据 (value/name)从consul的服务列表中选中service-id匹配的目标服务;
*/
String url() default "";
boolean decode404() default false;
Class<?>[] configuration() default {};
Class<?> fallback() default void.class;
Class<?> fallbackFactory() default void.class;
/**
* 说明:
* 目标服务器 对应的资源 uri (FeignClient下所有方法相同的path路径)
*/
String path() default "";
boolean primary() default true;
}