是一点个人学习实践(仿尚硅谷尚医通项目)的笔记整理,可能没什么深度,但确实是有效可行的。

Nacos部分

Nacos安装

  1. 我所建议也是我所采用的是直接下载的方式:https://github.com/alibaba/nacos/releases 1.1 进入官网,点击下载
  2. nacos不用网关实现负载均衡_微服务

  3. 1.2 在本地解压就安装完成了,我的目录是在/Library/Nacos

2.你也可以采用源码构建的方式,这也是官方手册中给出的下载方式的第一种https://nacos.io/zh-cn/docs/quick-start.html 但是可能是我学艺不精,还不清楚源码构建该怎么实现,因为里面没有bin目录也没有starup.sh于是启动方法不一样吧大概,这我没有具体再去了解了。所以最后我采用的是这里的直接下载方式。

nacos不用网关实现负载均衡_java_02

Nacos运行

  1. 用terminal进入到安装目录下的/nacos/bin页面(我是/Library/Nacos/bin)
  2. 运行代码sh startup.sh -m standalone即可
    整体如下图所示:

    到这里其实我以为Nacos没有启动成功,但实际上已经成功了
    因为进入/nacos/logs/start.out查看日志,可以看到:
  3. 关闭使用sh shutdown.sh

Nacos启动遇到并解决的问题

  1. 一个是一开始源码构建的方式,git clone了代码到本地,发现没有bin目录,无法使用网上官方以及其他博客中提到的启动方式(也即上文的命令),于是采用了直接下载的方式,解决问题。
  2. 之前还遇到过报错,大意是按照路径查找说找不到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不管哪个版本应该都没啥问题
    具体如图:
  3. nacos不用网关实现负载均衡_spring_03

    nacos不用网关实现负载均衡_java_04


Springboot部分

引入依赖

  1. 在需要网关的服务模块的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>
  1. 创建网关模块,添加相关依赖
<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>

网关简单配置

  1. 启动类没啥特别的
  2. nacos不用网关实现负载均衡_java_05

  3. 简单地添加config
  4. nacos不用网关实现负载均衡_微服务_06

//跨域处理
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);
}

}
  1. 配置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/**

服务简单配置

  1. 把所有的@CrossOrigin全部去掉,在启动类中添加@EnableDiscoveryClient注解,配置跨域在上文中CorsConfig.java里已经完成了
  2. 修改服务的application.properties

    a是具体的服务端口,请求发到80,网关给你转到8201来
    b要与上文配置gateway时application里注册的服务的名字要一样

服务启动

  1. 启动网关服务,再启动具体服务
  2. 进入127.0.0.1:8848/nacos/#/login(用户名和密码都是nacos)即可查看
  3. 我这儿其他测试也都已经没有问题了(前端的请求发送记得改成发送到80端口)

最后

肯定有不少地方我的理解或者分析有一定的问题,欢迎指出。
才疏学浅,还有很多地方要学习的,加油共勉。