SpringCloud -- 集成
前言
目前版本配置如下
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.7</version>
<relativePath/>
</parent>
<properties>
<spring-cloud.version>2021.0.2</spring-cloud.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
<mybatis-plus>3.5.1</mybatis-plus>
</properties>
<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>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus}</version>
</dependency>
</dependencies>
openFeign
引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
开启注解 发现 远程调用
@EnableFeignClients(basePackages = "com.atsc.demo.feign")
@EnableDiscoveryClient
@SpringBootApplication
配置注册中心地址
spring:
cloud:
nacos:
discovery:
server-addr: http://主机地址:默认端口8848
application:
name: nacos 上显示的服务应用名称
创建外部依赖包 feign
@FeignClient("nacos 服务名称")
public interface ScFeignService {
// 外部服务接口 外部服务全限定路由
@RequestMapping("/list")
R memeberCoupons();
}
注入使用
引言
/**
* 接口注释声明具有该接口的 REST 客户端应该是
* 创建(例如,用于自动装配到另一个组件中)。如果 SC LoadBalancer 可用
* 用于对后端请求进行负载均衡,负载均衡器可以是
* 使用与 feign 客户端相同的名称(即值)进行配置。
*
* @作者斯宾塞·吉布
* @作者维尼尔诺罗尼亚
* @作者奥尔加·马西亚泽克-夏尔马
*/
@interface FeignClient {
/**
* 带有可选协议前缀的服务名称。 {@link #name() 的同义词
* 姓名}。必须为所有客户端指定名称,无论是否提供 url。
* 可以指定为属性键,例如:${propertyKey}。
* @return 带有可选协议前缀的服务名称
*/
@AliasFor("name")
String value() default ""; //常用
/**
* 如果存在,这将用作 bean 名称而不是名称,但不会被使用
* 作为服务 ID。
* @return bean 名称而不是 name 如果存在
*/
String contextId() default "";
/**
* @return 带有可选协议前缀的服务 ID。 {@link #value() 的同义词
* 价值}。
*/
@AliasFor("值")
String name() default "";
/**
* @return feign 客户端的 <code>@Qualifiers</code> 值。
*
* 如果 {@link #qualifier()} 和 {@link #qualifiers()} 都存在,我们将使用
* 后者,除非 {@link #qualifiers()} 返回的数组为空或只有
* 包含 <code>null</code> 或空白值,在这种情况下我们将退回
* 首先到 {@link #qualifier()},如果它也不存在,则到默认值 =
* <code>contextId + "FeignClient"</code>。
*/
String[] qualifiers() default {};
/**
* @return 一个绝对 URL 或可解析的主机名(协议是可选的)。
*/
String url() default "";
/**
* @return 是否应该解码 404 而不是抛出 FeignExceptions
*/
boolean decode404() default false;
/**
* feign 客户端的自定义配置类。可以包含覆盖
* <code>@Bean</code> 定义组成客户端的部分,例如
* {@link feign.codec.Decoder},{@link feign.codec.Encoder},{@link feign.Contract}。
*
* @see FeignClientsConfiguration 默认
* @return feign 客户端的配置列表
*/
Class<?>[] configuration() default {};
/**
* 指定 Feign 客户端接口的后备类。后备类必须
* 实现这个注解所注解的接口,并且是一个有效的spring bean。
* @return 指定 Feign 客户端接口的后备类
*/
/**
常用 回退类 如果调用失败运行
*/
Class<?> fallback() default void.class; // 常用
/**
* 为指定的 Feign 客户端接口定义一个备用工厂。后备
* 工厂必须产生实现接口的回退类的实例
* 由 {@link FeignClient} 注释。后备工厂必须是有效的 Spring bean。
*
* @see FallbackFactory 了解详细信息。
* @return 指定 Feign 客户端接口的后备工厂
*/
Class<?> fallbackFactory() default void.class;
/**
* @return 由所有方法级映射使用的路径前缀。
*/
String path() default ""; // 常用
/**
* @return 是否将 feign 代理标记为主 bean。默认为真。
*/
boolean primary() default true;
}
nacos-cofig
参考文档 : nacos官网
引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
在 bootstrap.properties 中配置 Nacos server 的地址和应用名
说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。