是一点个人学习实践(仿尚硅谷尚医通项目)的笔记整理,可能没什么深度,但确实是有效可行的。
Nacos部分
Nacos安装
- 我所建议也是我所采用的是直接下载的方式:https://github.com/alibaba/nacos/releases
1.1 进入官网,点击下载
1.2 在本地解压就安装完成了,我的目录是在/Library/Nacos
2.你也可以采用源码构建的方式,这也是官方手册中给出的下载方式的第一种https://nacos.io/zh-cn/docs/quick-start.html
但是可能是我学艺不精,还不清楚源码构建该怎么实现,因为里面没有bin目录也没有starup.sh于是启动方法不一样吧大概,这我没有具体再去了解了。所以最后我采用的是这里的直接下载方式。
Nacos运行
- 用terminal进入到安装目录下的/nacos/bin页面(我是/Library/Nacos/bin)
- 运行代码
sh startup.sh -m standalone
即可
整体如下图所示:
到这里其实我以为Nacos没有启动成功,但实际上已经成功了
因为进入/nacos/logs/start.out查看日志,可以看到:
- 关闭使用
sh shutdown.sh
Nacos启动遇到并解决的问题
- 一个是一开始源码构建的方式,git clone了代码到本地,发现没有bin目录,无法使用网上官方以及其他博客中提到的启动方式(也即上文的命令),于是采用了直接下载的方式,解决问题。
- 之前还遇到过报错,大意是按照路径查找说找不到Java的路径(Nacos需要java环境),但是我按着路径明明能找到。再去~/.bashrc里查看也都没有问题。最后解决了。
2.1 可能原因(并不10000%肯定)
因为我用的是oh-my-zsh也就是zsh,而不是bash(现在Mac都是zsh了吧?之前用bash的时候每次都喊我换zsh),所以要去改~/.zshrc而不是原来的bashrc了
2.2 修改方法
2.2.1 terminal里面,vi ~/.zshrc
2.2.2 光标移到合适的位置,按i
输入,然后把bashrc里复制的直接cmd+v粘贴进去就行。
2.2.3 之后esc,:wq
保存并退出就行了
2.2.4 最后source ~/.zshrc
另外修改之后terminal里输入jdk8环境就变成jdk8,输入jdk13就变成jdk13,nacos不管哪个版本应该都没啥问题
具体如图:
Springboot部分
引入依赖
- 在需要网关的服务模块的pom文件中引入依赖
<!-- 服务调用feign -->
<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-starter-gateway</artifactId>
</dependency>
<!-- 服务注册 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
网关简单配置
-
启动类没啥特别的
-
简单地添加config
//跨域处理
package com.roger.vishop.gateway.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.util.pattern.PathPatternParser;
@Configuration
public class CorsConfig {
@Bean
public CorsWebFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.addAllowedMethod("*");
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
source.registerCorsConfiguration("/**", config);
return new CorsWebFilter(source);
}
}
- 配置application.properties
# ????
server.port=80
# ???
spring.application.name=service-gateway
# nacos????
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#????????
spring.cloud.gateway.discovery.locator.enabled=true
#????id
spring.cloud.gateway.routes[0].id=service-shop
#?????uri
spring.cloud.gateway.routes[0].uri=lb://service-shop
#??????,??servicerId?auth-service?/auth/??
spring.cloud.gateway.routes[0].predicates= Path=/*/shop/**
#????id
spring.cloud.gateway.routes[1].id=service-cmn
#?????uri
spring.cloud.gateway.routes[1].uri=lb://service-cmn
#??????,??servicerId?auth-service?/auth/??
spring.cloud.gateway.routes[1].predicates= Path=/*/cmn/**
服务简单配置
- 把所有的
@CrossOrigin
全部去掉,在启动类中添加@EnableDiscoveryClient
注解,配置跨域在上文中CorsConfig.java里已经完成了
- 修改服务的application.properties
a是具体的服务端口,请求发到80,网关给你转到8201来
b要与上文配置gateway时application里注册的服务的名字要一样
服务启动
- 启动网关服务,再启动具体服务
- 进入
127.0.0.1:8848/nacos/#/login
(用户名和密码都是nacos)即可查看
- 我这儿其他测试也都已经没有问题了(前端的请求发送记得改成发送到80端口)
最后
肯定有不少地方我的理解或者分析有一定的问题,欢迎指出。
才疏学浅,还有很多地方要学习的,加油共勉。