前言
昨天咱们玩玩了renren-generator,单体架构是玩玩了,无非是后边根据你的需求增加其他的组件,完成你的另一种CURD。那么今天咱们在来玩玩分布式,咱们把WhiteHole最根本的后端项目建立起来的分布式架构建立起来。
ok,咱们来开端吧,咱们把最简略的部分建立起来。然后用当时比较便利,干流,高效的计划去做整合。
首要是注册中心,然后装备中心,然后是长途衔接,然后是网关,那么装备注册中心呢,咱们都可以运用Nacos来做,事实上,这个Nacos将会充当更多的功能在本项目当中,长途调用当然还是openfeign,之后是GateWay 网关,那么为什么我要写这篇博文呢,首要是为了水博客,顺便便利自己以后copy装备。
留意这儿是最基础的装备,例如你的ES,分布式事务,权限中心呀,那是和你业务相关的,跟这篇博客没关系,我这是最根本的。
版别
在开端本文之前,我先重申一下我的环境版别,假如你要依照我这来玩,请务必保持和我相同的版别。假如没有依照这个版别来,发生了一些不友好的工作最后的解决计划除了砸电脑,最好的计划或许便是换回我在这儿给出版别,这儿面有许多问题,可是这个挑选咱们这个版别的话。高版别组件可兼容,低版别也能用。
SpringBoot:2.3.2.RELEASE
SpringCloud:Hoxton.SR9
SpringCloudAlibaba:2.2.6.RELEASE
nacos:1.14
注册中心
废话不多说,那么现在咱们第一步需求做到是经过nacos进行微服务注册,这一步其实十分简略,比从前的eureka还要简略。首要导入依靠,我这儿以WhiteHole项目为例。
导入nacos依靠,这儿重申一遍便是这儿运用的nacos服务端版别为1.x版别的不是2.x版别的,SpringCloudAlibaba 2.2.6 为分界线,往上为2.x往下为1.x假如你是比这个版别低,你用的nacos服务端必须降低到1.x不然报错。2.x以上版别主张运用docker,由于有额外的权限,端口需求打开,直接运用docker更便利,此外自己电脑为戴尔游匣G5,当时演示系统为win10,经过测验nacos1.4x版别用不了主张运用1.1x这个版别可以运用。
- 导入依靠
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- 进入装备
- 开启注解
接下来咱们测验一下,启动一切服务。
可以看到服务正常
OpenFeign
这个也是相同的老规矩,导入依靠
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
我这儿之所以不写版别号,是由于我的父工程仅仅做了聚合办理,一切的子工程在创立的运用其父都是SpringCloud,它里边做了版别办理 2. 编写调用接口
这儿的话其实有许多种办法,这儿演示最简略的办法去运用,其实我更想做的是集成到comment里边,由于毕竟是作为一个公共组件嘛,可是我又不想呈现天主组件,就先这将就吧。
我这边创立了一个包 我这儿演示的是调用blog模块。
之后是调用,这个也简略:
@Autowired
BlogFeignService blogFeignService;
@RequestMapping("/test")
public R test(){
Map<String, Object> map = new HashMap<>();
R list = blogFeignService.list(map);
return list;
}
装备中心
上面的ok了接下来便是装备中心了。
- 导入依靠:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 编写bootstrap.properties 这个文件有多大的优先级就不必我说了吧。
到这儿就完成了,现在咱们验证一下对不对。
现在我在activity的controller服务下面创立了一个test,专门用来测验的。
可以看到:
import java.util.HashMap;
import java.util.Map;
@RefreshScope
@RestController
public class Test {
@Autowired
BlogFeignService blogFeignService;
@RequestMapping("/testfeign")
public R test(){
Map<String, Object> map = new HashMap<>();
R list = blogFeignService.list(map);
return list;
}
@Value("${activity.name}")
private String name;
@RequestMapping("/testapp")
public R testapp(){
return R.ok().put("name",name);
}
}
我在装备文件当中写了一个装备 然后用@Value读取了。
之后这儿留意的是我还打了一个注解 @RefreshScope
这个玩意会帮助咱们动态刷新。
之后我去nacos装备中心装备一个新的装备文件
拜访测验页面成功拜访我这边的装备。
这儿的话,Nacos就差不多了,我这儿仅仅演示,实践怎样配的看你自己,我这儿也仅仅演示罢了。像什么分组呀,命名空间,装备阻隔神马神马的看你的业务了。
网关
这个也简略,我这儿的话就单纯的做一个转发,首要我已经把我的各个服务都放在nacos服务注册中心,所以的话这边就用GateWay直接做一个转发看看就好了。
- 导入依靠
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
这儿的话,我只直接在网关服务里边导入了。由于这边网关只有一个嘛。
然后这个玩意啥都不必干,直接导入装备就ok了。
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
service: gateway
gateway:
discovery:
locator:
enabled: true
routes:
#这儿先做一个根本的服务转发
- id: activiy8000
uri: lb://activiy
predicates:
- Path=/activiy/**
filters:
- StripPrefix=1
- id: blog8050
uri: lb://blog
predicates:
- Path=/blog/**
filters:
#- 转发做拼接,去掉provide后缀,uri/** 而不是 uri/provide/**
- StripPrefix=1
# 与之对于的还有 PrefixPath=/Huterox
# 当拜访 http://localhost:8762/aaa,加上前缀就变成 http://localhost:8762/Huterox/aaa
- id: community8100
uri: lb://community
predicates:
- Path=/community/**
filter:
- StripPrefix=1
- id: hole8150
uri: lb://hole
predicates:
- Path=/hole/**
filter:
- StripPrefix=1
- id: quiz8200
uri: lb://quiz
predicates:
- Path=/quiz/**
filter:
- StripPrefix=1
- id: user8250
uri: lb://user
predicates:
- Path=/user/**
filter:
- StripPrefix=1
application:
name: gateway
server:
port: 88
然后咱们测验一下,现在我在启动两个服务。 然后去经过网关拜访:
一切正常,当然我这儿还没有写入数据所以啥都没有。至此,一个十分简略的分布式项目就完成了根本的创立。