springcloudalibaba整合流程
相关依赖
⽗⼯程pom相关依赖
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-dependencies</artifactId>
<version>2.0.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
pom和import的作⽤
当需要引⼊很多jar包的时候会导致l过⼤,我们可以想到的⼀种解决⽅案是定义⼀个⽗项⽬,但是⽗项⽬只有⼀个,也有可能导致⽗项⽬的l⽂件过⼤。这个时候我们引进来⼀个type为pom,意味着我们可以将所有的jar包打包成⼀个pom,然后我们依赖了pom,即可以下载下来所有依赖的jar包。
⼦项⽬继承⽗项⽬后,直接在⼦pom中直接引⼊⽗pom相关的依赖即可。
⼦项⽬引⼊nacos依赖和web依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
spring-cloud-starter-alibaba-nacos-config是获取nacos配置依赖
spring-cloud-starter-alibaba-nacos-discovery是服务发现依赖
服务发现
新建两个⼦⼯程:service-a⽣产者和service-b消费者
service-a⽣产者 yml配置⽂件
server:
port: 7070
spring:
application:
name: service-a
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
在springboot启动类上新增注解@EnableDiscoveryClient,暴露服务,连接到注册中⼼。
新建controller
@RestController
public class TestController {
@GetMapping("/getData")
public String getData(){
return "success";
}
}
service-b消费者
pom⽂件新增feign依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
yml配置⽂件
server:
port: 7071
spring:
application:
name: service-b
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
feign:
sentinel:
enabled: true
在springboot启动类上新增注解@EnableDiscoveryClient,暴露服务,连接到注册中⼼。
同时开启sentinel熔断功能。
新增@EnableFeignClients注解,⽀持调⽤消费者接⼝。
新建测试类
@RestController
public class TestController {
@Autowired
private ConsumerService consumerService;
@GetMapping("/getData")
public String getData() {
String data = Data();
return "consumer consumer ---" + data;
}
}
@FeignClient(value = "service-a", fallbackFactory = ConsumerServiceFallbackFactory.class)
interface ConsumerService {
@RequestMapping(value = "/getData", method= RequestMethod.GET)
String getDate();
}
@FeignClient(value = "service-a") 表⽰调⽤service-a服务下getData接⼝。fallbackFactory = ConsumerServiceFallbackFactory.class 表⽰熔断异常时对应的异常处理类。
@Component
public class ConsumerServiceFallbackFactory implements FallbackFactory<HelloServiceFallback> {    public HelloServiceFallback create(Throwable throwable) {
return new HelloServiceFallback(throwable);
}
}
public class HelloServiceFallback implements ConsumerService {
private final Throwable throwable;
HelloServiceFallback(Throwable throwable) {
this.throwable = throwable;
}
public String getDate() {
return "服务调⽤失败,降级处理。异常信息:" + Message();
}
}
设置ribbon均衡负载
启动类加上
@Bean
public RandomRule createRule(){
return new RandomRule();
}
引⼊接⼝⽂档
⽗⼯程pom引⼊依赖
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-dependencies</artifactId>
<version>2.0.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
⼦⼯程pom引⼊依赖
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
</dependency>
⼦⼯程新建配置类
@Configuration
@EnableSwagger2
@EnableKnife4j
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfig {
@Bean(value = "default")
public Docket GitEggApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//分组名称
.groupName("2.X版本")
.select()
//这⾥指定Controller扫描包路径
.
apis(RequestHandlerSelectors.basePackage("ller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder().version("1.0.0")
.title("Spring Cloud Swagger2 ⽂档")
.description("Spring Cloud Swagger2 ⽂档")
.termsOfServiceUrl("")
.build();
}
}
访问服务地址:端⼝号/doc.html,即可访问。springcloud和springboot
nacos配置管理
pom⽂件添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
在resources⽂件下,新建l⽂件,新增配置
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: properties
${prefix}-${spring.profiles.active}.${file-extension}
prefix:前缀,默认是spring.application.name的值,也可以通过配置项 spring.fig.prefix来配置。
spring.profiles.active:即为当前环境对应的 profile。
当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension} file-exetension 为配置内容的数据格式,可以通过配置项 spring.fig.file-extension 来配置。⽬前只⽀持 properties 和 yaml 类型。
在nacos配置列表新增配置DataId为service-b.properties,配置内容为config.version=1。
记得加上注解,@RefreshScope,才能够刷新动态配置的值
@RestController
@RefreshScope
@Api(tags = "调⽤service-a控制器")
public class TestController {
@Autowired
private ConsumerService consumerService;
@Value("${config.version}")
private String version;
@GetMapping("/getData")
@ApiOperation(value = "调⽤service-a⽅法")
public String getData() {
String date = Date();
return "consumer consumer ---" + date;
}
@GetMapping("/getConfig")
@ApiOperation(value = "获取nacos动态配置参数")
public String getConfig(){
return version;
}
}
访问接⼝⽂档地址,测试getConfig接⼝。
关于命名空间和分组
Namespace:解决多环境及多租户数据的隔离问题在多套不同的环境下,可以根据指定的环境创建不同的Namespace,实现多环境的数据隔离。默认的命名空间是public。
Group:Nacos 中的⼀组配置集,是组织配置的维度之⼀,简单的说则是不同的系统或微服务的配置⽂件可以放在⼀个组⾥。Nacos如果不指定Group,则默认的分组是 DEFAULT_GROUP。
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: properties
# namespace的取值是命名空间ID,需要去nacos控制台查看
namespace: d0ffeec2-3deb-4540-9664-fdd77461fd6b
# 指定分组为ORDER_GROUP
group: ORDER_GROUP
根据⾃⼰业务场景做好多环境配置隔离(Namespace)、不同业务配置隔离(Group)。
如果想要使⽤其他配置⽂件,添加yml配置。
service-a.properties是同⼀命名空间的配置⽂件。
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: properties
namespace: 8ca6407f-fd47-4339-a121-1333e95e6c11
group: ORDER_GROUP
shared-configs:
- dataId: service-a.properties
refresh: true
group: DEFAULT_GROUP
OpenFeign设置
默认1秒超时时间,通过yml配置设置全局过期时间和指定服务超时时间。
feign:
sentinel:
enabled: true
client:
config:
default:              # default 设置的全局超时时间,指定服务名称可以设置单个服务的超时时间
connectTimeout: 5000 # 建⽴链接所⽤的时间,适⽤于⽹络状况正常的情况下,两端链接所⽤的时间        readTimeout: 5000    # 建⽴链接后从服务器读取可⽤资源所⽤的时间
service-a:  # 指定service-a的超时时间
connectTimeout: 3000
readTimeout: 2000
替换client为ApacheHttpClient
新增依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
yml新增配置
feign:
httpclient:
enabled: true

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。