解锁Spring Cloud Gateway与Nginx最強配置,构建未来网络高速公路!(下)

news2024/12/27 4:29:05

文章目录

    • 5. 监控与日志
      • 5.1 Nginx访问日志与错误日志配置
        • 访问日志配置
        • 错误日志配置
      • 5.2 Spring Cloud Gateway的日志记录与监控集成
        • 日志记录
        • 监控集成
        • 微服务监控
    • 6. 故障排查与常见问题
      • 6.1 配置错误常见原因与解决
        • 语法错误
        • 监听端口冲突
        • 路由规则不匹配
      • 6.2 性能瓶颈识别与优化建议
        • 慢响应服务
        • 高并发下的网关稳定性
      • 6.3 安全配置常见漏洞与加固措施
        • SSL/TLS配置不当
        • 未授权访问
        • 日志泄露敏感信息
    • 7. 案例分析与最佳实践
      • 7.1 多环境配置管理
        • 使用配置文件分离环境配置
        • 使用配置中心管理配置
      • 7.2 微服务架构中的网关部署策略
        • 网关与服务的协同部署
        • 网关的灰度发布
      • 7.3 自定义业务逻辑在网关层的实现
        • 实现统一认证
        • 实现跨服务的请求日志记录
    • 8. 结语
      • 8.1 网关技术发展趋势
        • 8.1.1 服务网格的兴起
        • 8.1.2 无服务器计算与API网关
        • 8.1.3 人工智能与机器学习集成
      • 8.2 持续学习资源推荐
      • 8.3 鼓励探索和实验
      • 8.4 保持好奇心和热情

在这里插入图片描述

5. 监控与日志

在网关的世界里,监控和日志记录就像是超级英雄的雷达系统,帮助我们时刻洞察系统的健康状况,及时发现并解决问题。这一节,我们将探索如何配置Nginx和Spring Cloud Gateway的日志记录和监控集成。

5.1 Nginx访问日志与错误日志配置

Nginx的日志记录功能非常强大,它允许你自定义日志格式,记录访问日志和错误日志。

访问日志配置

访问日志记录了所有HTTP请求的详细信息。在nginx.conf中,我们可以定义日志格式和日志文件的位置:

http {
    access_log /var/log/nginx/access.log main;
    error_log /var/log/nginx/error.log;

    server {
        # ... 其他配置 ...
    }
}

在这个配置中,access_log指令指定了访问日志的存放路径和使用的日志格式。main是一个预定义的日志格式,包含了客户端IP、请求时间、请求方法、请求URI、协议版本、状态码等信息。

错误日志配置

错误日志记录了Nginx处理请求时遇到的错误。默认情况下,错误日志的存放路径和日志级别已经设置好了,但你可以根据自己的需要进行调整:

error_log /var/log/nginx/error.log warn;

这里的warn表示日志级别,Nginx会记录warn级别以上的所有日志。

5.2 Spring Cloud Gateway的日志记录与监控集成

Spring Cloud Gateway的日志记录和监控集成主要依赖于Spring Boot Actuator和第三方监控系统。

日志记录

Spring Boot Actuator提供了一些内建的端点,可以用来查看和管理应用的日志。例如,loggers端点允许你查看和修改日志级别:

# 在application.properties或application.yml中启用Actuator
management.endpoints.web.exposure.include=loggers

然后,你可以通过调用/actuator/loggers端点来查看和修改日志级别:

curl -X GET http://localhost:8080/actuator/loggers
监控集成

Spring Boot Actuator还支持与Prometheus等监控系统的集成。以下是集成Prometheus的配置示例:

# 配置Prometheus监控
management.metrics.export.prometheus.enabled=true
management.metrics.export.prometheus.step=60

# 暴露Prometheus端点
management.endpoints.web.exposure.include=prometheus

启用Prometheus端点后,Prometheus服务器可以定期抓取/actuator/prometheus端点的数据,进行监控和分析。

微服务监控

对于微服务架构,我们通常需要一个集中的监控系统来监控所有服务的状态。Spring Cloud提供了Spring Boot Admin,它可以与Spring Cloud Gateway集成,提供集中的监控和管理界面。

首先,添加Spring Boot Admin的依赖:

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>

然后,在主应用中添加SpringBootApplication注解:

@SpringBootApplication
@EnableDiscoveryClient
public class AdminServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(AdminServerApplication.class, args);
    }
}

这样,咱们就可以通过Spring Boot Admin的界面来监控和管理所有的微服务实例了。

通过这些监控与日志配置,我们的网关超级英雄不仅能够高效地处理流量,还能及时地向我们报告它的状态,让我们能够及时发现并解决问题。接下来,我们将进入故障排查与常见问题的环节,学习如何维护和优化我们的网关系统。

在这里插入图片描述

6. 故障排查与常见问题

在网关的日常运维中,难免会遇到一些故障和问题。这时,我们就需要变身为“故障侦探”,利用我们的排查技巧和工具,快速定位并解决问题。这一节,我们将探讨一些常见的配置错误、性能瓶颈以及安全漏洞的识别和解决策略。

6.1 配置错误常见原因与解决

在配置网关时,一些常见的错误可能会导致服务无法正常工作。以下是一些典型的例子和解决方法:

语法错误

问题:配置文件中的语法错误会导致网关启动失败。

解决

  • Nginx配置错误时,可以使用命令 nginx -t 来测试配置文件的语法是否正确。
  • Spring Cloud Gateway配置错误时,应用启动会失败并打印错误信息,仔细阅读错误信息通常可以找到问题所在。
监听端口冲突

问题:网关监听的端口可能与其他服务冲突。

解决

  • 确保网关配置的端口没有被其他服务占用,可以使用 netstat -tulnp | grep <端口号> 来检查端口使用情况。
路由规则不匹配

问题:路由规则配置错误可能导致请求无法正确转发。

解决

  • 检查路由的predicates是否正确匹配请求路径。
  • 确保urilbUri指向的后端服务地址是正确的。

6.2 性能瓶颈识别与优化建议

性能瓶颈会严重影响用户体验,我们需要通过监控来识别瓶颈并进行优化。

慢响应服务

问题:后端服务响应慢,导致网关整体性能下降。

解决

  • 使用Spring Cloud Gateway的请求超时配置,对慢响应的服务进行超时设置。
  • 对后端服务进行性能优化,比如数据库查询优化、缓存应用等。
高并发下的网关稳定性

问题:在高并发请求下,网关可能出现延迟或服务不稳定。

解决

  • 增加网关服务器的硬件资源,如CPU核心数和内存。
  • 对Nginx的连接超时参数进行调整,如proxy_connect_timeoutproxy_send_timeoutproxy_read_timeout

6.3 安全配置常见漏洞与加固措施

网关作为系统的第一道防线,安全性至关重要。

SSL/TLS配置不当

问题:如果SSL/TLS配置不当,可能会导致安全漏洞。

解决

  • 确保使用的是强加密套件,避免使用已知不安全的加密算法。
  • 定期更新和更换SSL证书。
未授权访问

问题:网关未正确配置认证和授权机制,可能导致未授权访问。

解决

  • 在Spring Cloud Gateway中使用Spring Security等安全框架,配置OAuth2、JWT等认证方式。
  • 使用防火墙规则限制访问源,只允许特定的IP地址访问敏感服务。
日志泄露敏感信息

问题:日志中可能包含敏感信息,如用户密码、个人信息等。

解决

  • 在日志记录时,避免记录敏感信息。
  • 使用日志脱敏工具或库,如Spring Cloud Sleuth的Span日志脱敏功能。

通过这些故障排查和优化措施,我们可以确保网关系统的稳定性和安全性。

在这里插入图片描述

7. 案例分析与最佳实践

在这一节中,我们将通过一些具体的案例来展示网关在实际应用中的配置和管理技巧。我们将探讨多环境配置管理、微服务架构中的网关部署策略,以及如何在网关层实现自定义业务逻辑。

7.1 多环境配置管理

在不同的环境(如开发、测试和生产环境)中,网关的配置可能会有所不同。为了实现多环境配置管理,我们可以采用以下策略:

使用配置文件分离环境配置

案例:为不同的环境创建不同的配置文件,并在启动时指定使用哪个配置文件。

# 开发环境
java -jar gateway-service.jar --spring.profiles.active=dev

# 生产环境
java -jar gateway-service.jar --spring.profiles.active=prod

在Spring Cloud Gateway中,可以通过application-{profile}.yml文件来定义不同环境的配置,如数据库连接、网关路由规则等。

使用配置中心管理配置

案例:使用Spring Cloud Config Server来集中管理不同环境的配置。

# Config Server配置
spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/your-organization/config-repo

在Config Server的GitHub仓库中,可以为每个环境创建一个目录,存放该环境的配置文件,如dev.ymlprod.yml等。

7.2 微服务架构中的网关部署策略

在微服务架构中,网关的部署策略对整个系统的性能和稳定性至关重要。

网关与服务的协同部署

案例:将网关与微服务一起部署在Kubernetes集群中,利用Kubernetes的服务发现和负载均衡能力。

# Kubernetes部署配置示例
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gateway
spec:
  replicas: 3
  selector:
    matchLabels:
      app: gateway
  template:
    metadata:
      labels:
        app: gateway
    spec:
      containers:
      - name: gateway
        image: your-registry/gateway:latest
        ports:
        - containerPort: 8080

在Kubernetes中,可以为网关创建一个Deployment,设置副本数来确保高可用性。

网关的灰度发布

案例:使用Spring Cloud Gateway的路由权重和Nginx的upstream权重来实现灰度发布。

# Spring Cloud Gateway路由配置示例
spring:
  cloud:
    gateway:
      routes:
      - id: v1-service
        uri: lb://v1-service
        predicates:
        - Path=/service/**
        filters:
        - name: Weight
          args:
            version: 1
            weight: 90
      - id: v2-service
        uri: lb://v2-service
        predicates:
        - Path=/service/**
        filters:
        - name: Weight
          args:
            version: 2
            weight: 10

通过调整路由的权重,可以控制流量分配到不同版本的服务上,实现灰度发布。

7.3 自定义业务逻辑在网关层的实现

网关层是实现跨服务的业务逻辑的理想位置,如统一认证、日志记录、监控等。

实现统一认证

案例:在Spring Cloud Gateway中实现基于JWT的统一认证。

@Component
public class AuthFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        String authHeader = exchange.getRequest().getHeaders().getFirst("Authorization");
        if (authHeader == null || !authHeader.startsWith("Bearer ")) {
            return ServerResponse.status(HttpStatus.UNAUTHORIZED).body(BodyInserters.fromObject("Missing or invalid token")).delayElement(Duration.ofSeconds(1)).then();
        }
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        return -1; // 优先处理
    }
}

这个过滤器会检查每个请求的认证头,如果没有或格式不正确,则返回401 Unauthorized响应。

实现跨服务的请求日志记录

案例:在Spring Cloud Gateway中实现请求日志记录,用于监控和调试。

@Component
public class RequestLoggingFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        URI uri = request.getURI();
        long start = System.currentTimeMillis();
        return chain.filter(exchange).doFinally(signal -> {
            long end = System.currentTimeMillis();
            String log = String.format("Request: %s %s %s %d %dms", request.getMethod(), uri.getPath(), request.getQueryParams(), exchange.getResponse().getStatusCode().value(), end - start);
            // 将日志发送到日志系统或监控系统
            System.out.println(log);
        });
    }

    @Override
    public int getOrder() {
        return 0;
    }
}

这个过滤器会记录每个请求的方法、路径、查询参数、响应状态码和处理时间,并将日志输出到控制台或发送到日志系统。

通过这些案例分析和最佳实践,我们可以看到网关在实际应用中的灵活和强大。网关不仅仅是流量的转发器,更是微服务架构中的守护者和枢纽。别急,慢慢来,我们的网关超级英雄正变得越来越聪明和能干。

8. 结语

在这段旅程的尾声,我们不仅搭建了一个强大的网关,还学会了如何让它更加智能和健壮。现在,让我们来回顾一下我们的成就,并为未来的探险做准备。

8.1 网关技术发展趋势

网关技术正朝着更加智能化、集成化和云原生化的方向发展。以下是一些值得关注的发展趋势:

  • 智能化:通过机器学习和人工智能技术,网关能够更智能地处理流量,比如智能路由、异常检测和自动扩缩容。
  • 集成化:网关正逐渐集成更多的功能,如API管理、服务网格、多协议支持等,成为一个全面的服务治理平台。
  • 云原生化:随着微服务和容器化技术的发展,网关也在向云原生架构演进,以更好地支持动态伸缩、持续集成和持续部署。
8.1.1 服务网格的兴起

服务网格(Service Mesh)作为一个微服务架构中的新概念,它为服务间的通信提供了一个可靠的中间层,负责处理服务间的安全、可靠和高效的交互。Istio和Linkerd是当前流行的服务网格实现。

例子:Istio中的Gateway资源可以用于定义进入服务网格的访问点。

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: my-gateway
spec:
selector:
istio: ingressgateway # 使用istio的ingressgateway
servers:

  • port:
    number: 80
    name: http
    protocol: HTTP
    hosts:
    • “*”
8.1.2 无服务器计算与API网关

无服务器(Serverless)计算允许开发者构建和运行应用和服务,而无需管理服务器。在这种模式下,API网关将扮演更加重要的角色,作为触发无服务器函数的关键组件。

例子:使用AWS API Gateway触发Lambda函数。

swagger: '2.0'
info:
  version: '2017-02-22'
  title: LambdaTrigger
paths:
  /example:
    x-amazon-apigateway-any-method:
      responses: {}
      x-amazon-apigateway-integration:
        httpMethod: POST
        type: aws_proxy
        uri: 
          Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:my-lambda/invocations
8.1.3 人工智能与机器学习集成

将AI和ML集成到网关中,可以提供智能流量管理、异常检测和预测性维护等功能。

例子:使用机器学习模型分析API流量,预测流量峰值。

伪代码:使用Python的scikit-learn库训练一个简单的预测模型
from sklearn.linear_model import LinearRegression
import numpy as np

假设我们有一组API请求数据
historical_data = np.array([…])

训练模型
model = LinearRegression().fit(historical_data, …)

预测未来的流量
predicted_traffic = model.predict(future_data)
9.4 网关即服务(GaaS)
随着云服务的发展,网关即服务(GaaS)提供了一种全托管的网关解决方案,简化了网关的部署、扩展和管理。

例子:使用AWS Global Accelerator提升全球用户的访问速度。

{
“GlobalAccelerator”: {
“Accelerator”: {
“Name”: “my-accelerator”,
“IpAddressType”: “IPV4”,
“Enabled”: true
}
}
}

8.2 持续学习资源推荐

学习永无止境,尤其是在技术领域。以下是一些推荐的资源,帮助你持续提升:

  • 官方文档:无论是Nginx还是Spring Cloud Gateway,官方文档都是最权威的学习资料。
  • 在线课程:平台如Coursera、edX、Udemy提供了丰富的网关和相关技术课程。
  • 技术社区:加入Stack Overflow、GitHub、Reddit等社区,与全球开发者交流心得。
  • 技术博客和论坛:关注技术大牛的博客,参与论坛讨论,可以让你获得宝贵的知识和经验。

8.3 鼓励探索和实验

最后,不要害怕尝试新事物。技术的世界充满了可能性,而探索和实验是解锁这些可能性的钥匙。以下是一些鼓励探索的建议:

  • 搭建实验环境:在隔离的实验环境中尝试新的配置和代码,可以避免影响到生产环境。
  • 学习新工具:不断尝试新的工具和框架,了解它们的优势和局限。
  • 参与开源项目:参与开源项目不仅能提升技术能力,还能贡献社区,结识志同道合的朋友。
# 示例:使用Docker快速搭建一个实验用的Nginx环境
docker run --name my-nginx -d -p 8080:80 nginx

上面的命令可以快速启动一个Nginx容器,用于实验和学习。

8.4 保持好奇心和热情

技术的世界日新月异,保持好奇心和热情是持续学习的动力。对于每一个新问题,都要像侦探一样去探索和解决。记住,每一个挑战都是成长的机会。

随着这篇指南的结束,你的网关超级英雄之旅才刚刚开始。带着这份指南,继续探索和学习,让你的网关变得更加强大和智能。记住,无论遇到什么困难,都要保持冷静,一步一步地分析和解决问题。

你的网关超级英雄正准备迎接新的挑战,你准备好了吗?加油,未来的网关大师!


希望这篇指南对你有所帮助。如果你有任何问题或建议,欢迎留言交流。祝你在网关的世界里,一路顺风,勇往直前!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1662080.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Navicat Data Modeler Ess for Mac:强大的数据库建模设计软件

Navicat Data Modeler Ess for Mac是一款专为Mac用户设计的数据库建模与设计工具&#xff0c;凭借其强大的功能和直观的界面&#xff0c;帮助用户轻松构建和管理复杂的数据库模型。 Navicat Data Modeler Ess for Mac v3.3.17中文直装版下载 这款软件支持多种数据库系统&#x…

OmniPlan Pro 4 for Mac中文激活版:项目管理的新选择

OmniPlan Pro 4 for Mac作为一款专为Mac用户设计的项目管理软件&#xff0c;为用户提供了全新的项目管理体验。其直观易用的界面和强大的功能特性&#xff0c;使用户能够轻松上手并快速掌握项目管理要点。 首先&#xff0c;OmniPlan Pro 4 for Mac支持自定义视图&#xff0c;用…

鸿蒙内核源码分析(VFS篇) | 文件系统和谐共处的基础

基本概念 | 官方定义 VFS&#xff08;Virtual File System&#xff09;是文件系统的虚拟层&#xff0c;它不是一个实际的文件系统&#xff0c;而是一个异构文件系统之上的软件粘合层&#xff0c;为用户提供统一的类Unix文件操作接口。由于不同类型的文件系统接口不统一&#x…

开源相机管理库Aravis例程学习(七)——chunk-parser

开源相机管理库Aravis例程学习&#xff08;七&#xff09;——chunk-parser 简介例程代码函数说明arv_camera_create_chunk_parserarv_camera_set_chunksarv_chunk_parser_get_integer_value 简介 本文针对官方例程中的&#xff1a;05-chunk-parser做简单的讲解。并介绍其中调…

钓场是怎么收费看时间的,钓鱼钓虾计时计费管理系统软件

钓场是怎么收费看时间的&#xff0c;钓鱼钓虾计时计费管理系统软件 一、前言 以下软件操作教程以&#xff0c;佳易王钓场计时计费管理软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 佳易王钓场计时计费管理软件&#xff0c;支持百人或千人…

sql-labs通关详解(1-10)

1.less-1 1.判断类型 由此判断是字符型漏洞由单引号闭合。 2.判断 字段个数 http://192.168.190.145/sqli-labs/Less-1/?id1 order by 3-- 3.获取数据库名 -1 union select 1,2,database()-- 4.获取表名 -1 union select 1,2,group_concat(table_name) from information_…

权限束缚术--权限提升你需要知道这些

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要对渗透测试中权限提升的一些基础知识进行整理 并不包含权限提升的具体操作 适合要入门权限提升的朋友 提权的重要性 我们在渗透网站时&#xff0c;我们往往会拿到一些权限&#xff0c;但是我们的权限有…

目标检测算法YOLOv7简介

YOLOv7由Chien-Yao Wang等人于2022年提出&#xff0c;论文名为&#xff1a;《YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors》&#xff0c;论文见&#xff1a;https://arxiv.org/pdf/2207.02696 &#xff0c;项目网页&#xff…

HC-05的简介与使用

蓝牙概述 蓝牙&#xff08;Bluetooth&#xff09;是一种用于无线通信的技术标准&#xff0c;允许设备在短距离内进行数据交换和通信。它是由爱立信&#xff08;Ericsson&#xff09;公司在1994年推出的&#xff0c;以取代传统的有线连接方式&#xff0c;使设备之间能够实现低功…

Ansible-Playbook通过role角色部署Lnmp架构

目录​​​​​​​ 一、配置Nginx的Roles角色 1.1编写files/default.conf 1.2编写files/nginx.repo 1.3编写handlers/main.yml 1.4编写tasks/main.yml文件 1.5编写vars/main.yml文件 1.6测试运行结果&#xff0c;并不是真的执行任务 二、配置Mysql的Roles角色 2.1编写…

vue-fontawesome-elementui-icon-picker选择icon框架

第一步&#xff1a;安装vue-fontawesome-elementui-icon-picker依赖 npm install vue-fontawesome-elementui-icon-picker --save-dev 第二步&#xff1a;main.js配置 (放在element ui引入之后) import iconPicker from vue-fontawesome-elementui-icon-picker; Vue.use(ico…

day2_greedyIntervalsLRU/LFU

二、贪心算法之区间调度问题 0.计算一个区间集合中无重复的区间的最大数量(模板) public int intervalSchedule(int[][] intvs) {if (intvs.length 0) return 0;// 按 end 升序排序Arrays.sort(intvs, (a, b) -> Integer.compare(a[1], b[1]));// 至少有一个区间不相交in…

Web3 Tools - Base58

Base58编码 Base58编码是一种用于表示数字的非常见的编码方法。它通常用于加密货币领域&#xff0c;例如比特币和其他加密货币的地址表示。 什么是Base58编码&#xff1f; Base58编码是一种将数字转换为人类可读形式的编码方法。与常见的Base64编码不同&#xff0c;Base58编码…

Docker常用镜像安装

1. mysql 1.1 安装 获取镜像 docker pull mysql:8.0.30创建文件挂载目录 创建容器并运行 docker run -p 3306:3306 --name mysql8 \ -v /home/docker/mysql8/log:/var/log/mysql \ -v /home/docker/mysql8/data:/var/lib/mysql \ -v /home/docker/mysql8/mysql-files:/va…

鸿蒙OpenHarmony开发板解析:【特性配置规则】

特性 特性配置规则 下面介绍feature的声明、定义以及使用方法。 feature的声明 开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 在部件的bundle.json文件中通过feature_list来声明部件的feature列…

『大模型笔记』Google CEO Sundar Pichai(桑达尔·皮查伊)谈人工智能的未来!

Google CEO Sundar Pichai(桑达尔皮查伊)谈人工智能的未来! 文章目录 一. Google CEO谈人工智能的未来总结摘要观点时间线二. 参考文献中文字幕视频链接,欢迎关注我的xhs账号:Google CEO 皮查伊谈人工智能的未来! 一. Google CEO谈人工智能的未来

VTK 数据类型:规则网格

VTK 数据类型&#xff1a;规则网格 VTK 数据类型&#xff1a;规则网格分类三种规则网格需要的设置实例 VTK 数据类型&#xff1a;规则网格 分类 VTK 有 3 种规则网格&#xff1a; vtkImageData&#xff1a;几何结构和拓扑结构都是规则的。vtkRectilinearGrid&#xff1a;几何…

大语言模型的后处理

后处理的输入 常规意义上的大模型处理流程 import torch from transformers import LlamaForCausalLM, LlamaTokenizer# 加载模型和tokenizer model LlamaForCausalLM.from_pretrained("decapoda-research/llama-7b-hf") tokenizer LlamaTokenizer.from_pretrain…

《Python编程从入门到实践》day24

# 昨日知识点学习 创建外星人从一个到一行 # 主程序snipdef _create_fleet(self):"""创建外星人群"""# 创建一个外星人并计算一行可容纳多少个外星人# 外星人的间距为外星人的宽度alien Alien(self)alien_width alien.rect.widthavailable_sp…

使用Vue调用ColaAI Plus大模型,实现聊天(简陋版)

首先去百度文心注册申请自己的api 官网地址&#xff1a;LuckyCola 注册点开个人中心 查看这个文档自己申请一个ColaAI Plus定制增强大模型API | LuckyColahttps://luckycola.com.cn/public/docs/shares/api/colaAi.html来到vue的页面 写个样式 <template><Header …