SpringCloud整合Gateway结合Nacos

目录

一、引入依赖

二、开启两个测试项目

[2.1 order service](#2.1 order service)

[​编辑 2.2 user service](#编辑 2.2 user service)

三、gateway项目

[3.1 新建一个bootstrap.yml文件](#3.1 新建一个bootstrap.yml文件)

[3.2 将我们的的网关配置写道nacos里的配置里](#3.2 将我们的的网关配置写道nacos里的配置里)

[3.3 测试:看能够根据网关路由到两个测试的项目](#3.3 测试:看能够根据网关路由到两个测试的项目)

[四、 优化](#四、 优化)

[4.1 将项目打包,并且复制下面的dockerfile文件(和src同级)](#4.1 将项目打包,并且复制下面的dockerfile文件(和src同级))

[4.2 提交代码到云效](#4.2 提交代码到云效)

[4.3 打开阿里云镜像](#4.3 打开阿里云镜像)

[4.4 新建clcd流水线](#4.4 新建clcd流水线)

[4.5 docker 发布多个镜像](#4.5 docker 发布多个镜像)

[4.6 配置Nginx,调用多个服务](#4.6 配置Nginx,调用多个服务)

[4.7 挂载](#4.7 挂载)

[docker run -d --name=nginx01 -v /opt/nginx/default.conf:/etc/nginx/conf.d/default.conf -p 3000:80 nginx4.8 测试](#docker run -d --name=nginx01 -v /opt/nginx/default.conf:/etc/nginx/conf.d/default.conf -p 3000:80 nginx4.8 测试)


一、引入依赖

XML 复制代码
  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</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>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

二、开启两个测试项目

2.1 order service

端口为:3222

2.2 user service

端口为:3111

三、gateway项目

3.1 新建一个bootstrap.yml文件

指定文件的地址为 yaml形式 如果是properties 则可以不用加

XML 复制代码
spring:
  application:
    name: gateway-app
  cloud:
    nacos:
      config:
        server-addr: 192.168.11.82:8848
        file-extension: yaml
      discovery:
        server-addr: 192.168.11.82:8848

3.2 将我们的的网关配置写道nacos里的配置里

配置内容:

XML 复制代码
spring:
  application:
    name: gateway-app
  cloud:
    gateway:
      routes:
        # 通过网关进行访问:eg:http://localhost:8080/user-service/api/user/test
        - id: order-service-app
          uri: lb://order-service-app
          predicates:
            - Path=/order-service/**
          filters:
            - StripPrefix=1
        - id: user-service-app
          uri: lb://user-service-app
          predicates:
            - Path=/user-service/**
          filters:
            - StripPrefix=1
logging:
  level:
    root: error
    com.beiyou: DEBUG

3.3 测试:看能够根据网关路由到两个测试的项目

四、 优化

前面方式的弊端:当我们的服务越来越多的时候 配置也越来越繁琐,我们可以将项目打包到docker

4.1 将项目打包,并且复制下面的dockerfile文件(和src同级)

XML 复制代码
# 基础镜像
FROM openjdk:8
# 设置工作目录
WORKDIR /opt
# 拷贝jar 包到工作目录
ADD target/gateway-0.0.1-SNAPSHOT.jar app.jar
RUN ls
# 设置暴漏的端口
EXPOSE 8080
# 启动jar包
ENTRYPOINT [ "java","-jar","app.jar" ]

4.2 提交代码到云效

4.3 打开阿里云镜像

https://cr.console.aliyun.com/cn-beijing/instance/repositories

新建一个gateway-app的镜像

4.4 新建clcd流水线

注意点 :maven版本选择和自己本地相同或相近的,java构建的时候,由于是父子项目 我们只想要gateway这个子项目 添加命令**-pl gateway**

等到成功之后,打开阿里云镜像,复制里的日期为版本号

新建一个任务:执行命令curl post 钉钉通知(自动将我们的版本号 让钉钉通知我们)

https换成自己机器人的地址

XML 复制代码
curl -X POST \
     'https://oapi.dingtalk.com/robot/send?access_token=你的key' \
     -H 'Content-Type: application/json' \
     -d '{"msgtype":"text","text":{"content":"镜像:'${image}'"}}'

4.5 docker 发布多个镜像

XML 复制代码
 docker run -d --name=gateway01 -p 3111:8080 registry.cn-beijing.aliyuncs.com/wsm-app/gateway-app:2024-04-28-20-35-35
 
 
docker run -d --name=gateway02 -p 3222:8080 registry.cn-beijing.aliyuncs.com/wsm-app/gateway-app:2024-04-28-20-35-35

4.6 配置Nginx,调用多个服务

配置nginx 将nginx 进行挂载

XML 复制代码
upstream gateway-app{
    server 172.17.0.8:8080;
    server 172.17.0.7:8080;
}
server {
    listen 80;
    listen  [::]:80;
    server_name  localhost;
 
    #access_log  /var/log/nginx/host.access.log  main;
 
    location / {
       add_header 'Access-Control-Allow-Origin' '*';
       proxy_pass http://gateway-app ;
    }
 
    #error_page  404              /404.html;
 
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
 
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}
 
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}
 
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}
 

4.7 挂载

docker run -d --name=nginx01 -v /opt/nginx/default.conf:/etc/nginx/conf.d/default.conf -p 3000:80 nginx

4.8 测试

相关推荐
憨子周25 分钟前
2M的带宽怎么怎么设置tcp滑动窗口以及连接池
java·网络·网络协议·tcp/ip
涔溪2 小时前
Docker简介
spring cloud·docker·eureka
霖雨2 小时前
使用Visual Studio Code 快速新建Net项目
java·ide·windows·vscode·编辑器
SRY122404192 小时前
javaSE面试题
java·开发语言·面试
Fiercezm2 小时前
JUC学习
java
无尽的大道2 小时前
Java 泛型详解:参数化类型的强大之处
java·开发语言
ZIM学编程2 小时前
Java基础Day-Sixteen
java·开发语言·windows
我不是星海3 小时前
1.集合体系补充(1)
java·数据结构
P.H. Infinity3 小时前
【RabbitMQ】07-业务幂等处理
java·rabbitmq·java-rabbitmq
爱吃土豆的程序员3 小时前
java XMLStreamConstants.CDATA 无法识别 <![CDATA[]]>
xml·java·cdata