写点什么

快速构建基本的 SpringCloud 微服务

作者:Java-fenn
  • 2022 年 9 月 19 日
    湖南
  • 本文字数:2580 字

    阅读完需:约 8 分钟

快速构建基本的 SpringCloud 微服务


ok,我们来开始吧,我们把最简单的部分搭建起来。然后用当前比较方便,主流,高效的方案去做整合。


首先是注册中心,然后配置中心,然后是远程连接,然后是网关,那么配置注册中心呢,我们都可以使用 Nacos 来做,事实上,这个 Nacos 将会充当更多的功能在本项目当中,远程调用当然还是 openfeign,之后是 GateWay 网关,那么为什么我要写这篇博文呢,主要是为了水博客,顺便方便自己以后 copy 配置。


注意这里是最基础的配置,例如你的 ES,分布式事务,权限中心呀,那是和你业务相关的,跟这篇博客没关系,我这是最基本的。


版本在开始本文之前,我先重申一下我的环境版本,如果你要按照我这来玩,请务必保持和我一样的版本。如果没有按照这个版本来,发生了一些不友好的事情最后的解决方案除了砸电脑,最好的方案可能就是换回我在这里给出版本,这里面有很多问题,但是这个选择咱们这个版本的话。高版本组件可兼容,低版本也能用。


SpringBoot:2.3.2.RELEASESpringCloud:Hoxton.SR9SpringCloudAlibaba:2.2.6.RELEASEnacos: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 模块。


之后是调用,这个也简单:


@AutowiredBlogFeignService 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@RestControllerpublic class Test {


@AutowiredBlogFeignService 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:8848service: gatewaygateway:discovery:locator:enabled: trueroutes:#这里先做一个基本的服务转发- id: activiy8000uri: lb://activiypredicates:- 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


复制代码然后我们测试一下,现在我在启动两个服务。然后去通过网关访问:


一切正常,当然我这里还没有写入数据所以啥都没有。至此,一个非常简单的分布式项目就完成了基本的创建。

用户头像

Java-fenn

关注

需要Java资料或者咨询可加我v : Jimbye 2022.08.16 加入

还未添加个人简介

评论

发布
暂无评论
快速构建基本的SpringCloud微服务_Java_Java-fenn_InfoQ写作社区