Dubbo基础学习

news2024/11/15 18:33:48

目录

  • 第一章、概念介绍
    • 1.1)什么是RPC框架
    • 1.2)什么是分布式系统
    • 1.3)Dubbo概述
    • 1.3)Dubbo基本架构
  • 第二章、服务提供者(直连)
    • 2.1)目录结构和依赖
    • 2.2)model层
    • 2.3)service层
    • 2.4)resources配置文件
  • 第三章、服务消费者(直连)
    • 3.1)目录结构和依赖
    • 3.2)service层
    • 3.3)resources配置文件
  • 第四章、注册中心Zookeeper
    • 4.1)注册中心概述
    • 4.2)下载Zookeeper注册中心
    • 4.3)Windows安装Zookeeper
    • 4.3)Linux安装Zookeeper
  • 第五章、dubbo使用注册中心
    • 5.1)项目加入zookeeper客户端依赖
    • 5.2)配置文件修改
    • 5.3)dubbo其他配置

友情提醒

先看文章目录,大致了解文章知识点结构,点击文章目录可直接跳转到文章指定位置。

第一章、概念介绍

1.1)什么是RPC框架

RPC 【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,是一种技术思想,而不是规范。它允许程序调用另一个地址空间(网络的另一台机器上)的过程或函数,而不用开发人员显式编码这个调用的细节。调用本地方法和调用远程方法一样。

1.2)什么是分布式系统

分布式系统是若干独立计算机(服务器)的集合,这些计算机对于用户来说就像单个相关系统,分布式系统(distributed system)是建立在网络之上的服务器端一种结构。
部署在独立服务器上的各个子系统(项目),相互之间可以调用,形成一个大型分布式系统
独立部署的服务器没有额外要求,只需要满足子系统需求即可。
分布式系统中的计算机可以使用不同的操作系统,可以运行不同应用程序提供服务,将服务分散部署到多个计算机服务器上。

1.3)Dubbo概述

Dubbo官网网址:官网链接
①Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。可以和Spring框架无缝集成。

②Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案、服务治理方案。

③面向接口代理:调用接口的方法,在A服务器调用B服务器的方法,由dubbo实现对B的调用,无需关心实现的细节,就像MyBatis访问Dao的接口,可以操作数据库一样。不用关心Dao接口方法的实现。这样开发是方便,舒服的。

④支持多种协议:dubbo , hessian , rmi , http, webservice , thrift , memcached , redis。dubbo官方推荐使用dubbo协议。dubbo协议默认端口20880

1.3)Dubbo基本架构

①服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时向注册中心注册自己提供的服务。服务容器spring负责启动,加载,运行服务提供者。

②服务消费者(Consumer): 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

③注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者 –如果信息有变,注册中心提供新的信息给消费者

④监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心 –监控服务提供者、消费者状态,与开发没有直接关系
在这里插入图片描述

第二章、服务提供者(直连)

2.1)目录结构和依赖

在这里插入图片描述
pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.bjpowernode.dubbo</groupId>
    <artifactId>001-link-orderservice-provider</artifactId>
    <version>1.0.0</version>
    <dependencies>
        <!--Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.16.RELEASE</version>
        </dependency>


        <!--Dubbo依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.2</version>
        </dependency>

    </dependencies>


    <build>
        <plugins>

            <!--JDK1.8编译插件-->
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

        </plugins>

    </build>


</project>

2.2)model层

order

package com.bjpowernode.dubbo.model;


import java.io.Serializable;

public class Order implements Serializable {
    private String id;
    private String goodsName;
    private Double price;
    private Integer amount;

    public Order() {
    }

    public Order(String id, String goodsName, Double price, Integer amount) {
        this.id = id;
        this.goodsName = goodsName;
        this.price = price;
        this.amount = amount;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getGoodsName() {
        return goodsName;
    }

    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public Integer getAmount() {
        return amount;
    }

    public void setAmount(Integer amount) {
        this.amount = amount;
    }

    @Override
    public String toString() {
        return "Order{" +
                "id='" + id + '\'' +
                ", goodsName='" + goodsName + '\'' +
                ", price=" + price +
                ", amount=" + amount +
                '}';
    }
}

2.3)service层

OrderService

package com.bjpowernode.dubbo.service;

import com.bjpowernode.dubbo.model.Order;

public interface OrderService {
    public Order addOrder(Integer userId,String goodsName, Double price,Integer amount);
}

OrderServiceImpl

package com.bjpowernode.dubbo.service;

import com.bjpowernode.dubbo.model.Order;

public class OrderServiceImpl implements OrderService{
    public Order addOrder(Integer userId, String goodsName, Double price, Integer amount) {
        return new Order("110",goodsName,price,amount);
    }
}

OrderApplication

package com.bjpowernode.dubbo;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import java.io.IOException;

public class OrderApplication {
    public static void main(String[] args) throws IOException {
        /**
         * 启动spring容器:阅读配置文件
         *   1、 new ClassPathXmlApplicationContext("orderservce-provider.xml");
         *   2、 new FileSystemXmlApplicationContext("D:/orderservce-provider.xml");
         *   3、tomcat启动
         */

        new ClassPathXmlApplicationContext("orderservce-provider.xml");

        //标准键盘输入:线程会阻塞
        System.in.read();
    }
}

2.4)resources配置文件

orderservce-provider.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--服务项目名称:唯一 ,它的名称是dubbo内部使用的唯一标识    饭店名称-->
    <dubbo:application name="001-link-order-service-provider"></dubbo:application>

    <!--定义协议:告诉消费者如何访问  怎么访问-->
    <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>

    <!--
      dubbo:service:提供(暴露)服务     菜单
        interface:区分不同的服务
        ref:关联真正提供服务的bean对象
         registry="N/A":直连
    -->
    <dubbo:service
            interface="com.bjpowernode.dubbo.service.OrderService"
            ref="orderServiceImpl" registry="N/A"
    />

    <!--真正提供服务的bean对象    厨师-->
    <bean id="orderServiceImpl" class="com.bjpowernode.dubbo.service.OrderServiceImpl"></bean>
</beans>

第三章、服务消费者(直连)

3.1)目录结构和依赖

在这里插入图片描述
pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.bjpowernode.dubbo</groupId>
    <artifactId>002-link-main-web</artifactId>
    <version>1.0.0</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.16.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.2</version>
        </dependency>

        <dependency>
            <groupId>com.bjpowernode.dubbo</groupId>
            <artifactId>001-link-orderservice-provider</artifactId>
            <version>1.0.0</version>
        </dependency>


    </dependencies>


</project>

3.2)service层

ShopService

package com.bjpowernode.dubbo.service;


import com.bjpowernode.dubbo.model.Order;

public interface ShopService {

    public Order buyGoods(Integer userId, String goodsName, Double price, Integer amount);

}

ShopServiceImpl

package com.bjpowernode.dubbo.service;

import com.bjpowernode.dubbo.model.Order;

public class ShopServiceImpl implements ShopService {
    OrderService orderService;

    public void setOrderService(OrderService orderService) {
        this.orderService = orderService;
    }

    public Order buyGoods(Integer userId, String goodsName, Double price, Integer amount) {
       // new OrderServiceImpl().addOrder()
        return orderService.addOrder(userId, goodsName, price, amount);
    }
}

ShopApplication

package com.bjpowernode.dubbo;

import com.bjpowernode.dubbo.model.Order;
import com.bjpowernode.dubbo.service.ShopService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ShopApplication {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("shop-consume.xml");
        ShopService shopServiceImpl = (ShopService)context.getBean("shopServiceImpl");
        Order order = shopServiceImpl.buyGoods(1111, "apple", 10d, 2);
        System.out.println(order);
    }
}

3.3)resources配置文件

shop-consume.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--服务项目名称:唯一-->
    <dubbo:application name="002-link-main-web"></dubbo:application>

    <!--
        dubbo:reference:生成一个 代表远程服务的 bean对象
         id="remoteOrderService":bean对象名称

        url:dubbo服务地址
        interface:区分不同的服务
        registry="N/A":直连
    -->
    <dubbo:reference
            id="remoteOrderService"
            url="dubbo://localhost:20880"
            interface="com.bjpowernode.dubbo.service.OrderService"
            registry="N/A"
            />

    <bean id="shopServiceImpl" class="com.bjpowernode.dubbo.service.ShopServiceImpl">
        <property name="orderService" ref="remoteOrderService"></property>
    </bean>

</beans>

第四章、注册中心Zookeeper

4.1)注册中心概述

通过将服务统一管理起来,可以有效地优化内部应用对服务发布/使用的流程和管理。服务注册中心可以通过特定协议来完成服务对外的统一。Dubbo 提供的注册中心有如下几种类型可供选:

1、Multicast注册中心:组播方式
2、Redis注册中心:使用Redis作为注册中心
3、Simple注册中心:就是一个dubbo服务。作为注册中心。提供查找服务的功能。
4、Zookeeper注册中心:使用Zookeeper作为注册中心

注册中心工作方式
在这里插入图片描述

4.2)下载Zookeeper注册中心

①Zookeeper是一个高性能的,分布式的,开放源码的分布式应用程序协调服务。Zookeeper运行需要java环境。

官网下载地址: http://zookeeper.apache.org/

②点击download下载
在这里插入图片描述
③找到历史版本in the archive
在这里插入图片描述
④下载3.5.6版本
在这里插入图片描述
在这里插入图片描述

4.3)Windows安装Zookeeper

①下载的文件zookeeper-3.5.4-beta.tar.gz. 解压后到目录就可以了,例如d:/servers/ zookeeper-3.5.4
修改zookeeper-3.5.4/conf/ 目录下配置文件

在这里插入图片描述
②复制zoo-sample.cfg改名为zoo.cfg,然后打开文件,查看文件内容
在这里插入图片描述
查看zoo.cfg文件内容
在这里插入图片描述
文件内容介绍
tickTime: 心跳的时间默认2000毫秒. Zookeeper服务器之间或客户端与服务器之间每2秒就会发送一个心跳。表明存活状态。

dataDir: 数据目录,可以是任意目录。存储zookeeper的快照文件、pid文件,默认为/tmp/zookeeper

clientPort: 客户端连接zookeeper的端口,即zookeeper对外的服务端口,默认为2181
④在文件配置最下面加入需要使用的端口号

admin.serverPort=8888

在这里插入图片描述

⑤bin目录下双击cmd文件,启动zookeeper
在这里插入图片描述
windows启动zookeeper成功
在这里插入图片描述

4.3)Linux安装Zookeeper

①VMware虚拟机下载安装,虚拟机中安装Linux系统CentOS7(图文详解)
Linux安装教程链接

②Zookeeper的运行需要Linux系统先安装好jdk.
安装jdk教程链接

③使用xftp工具将刚刚下载好的zookeeper-3.5.6-beta.tar.gz 文件传输到Linux系统下的/usr/local/目录
xftp工具的使用教程链接

④解压压缩文件到/usr/local/目录

tar -zxvf zookeeper-3.5.6-beta.tar.gz -C /usr/local/

⑤进入解压后的conf目录

cd apache-zookeeper-3.8.1-bin/conf

⑥拷贝文件 zoo-sample.cfg 为 zoo.cfg

zoo_sample.cfg

⑦使用vim命令修改zoo.cfg文件内容

vim zoo.cfg

增加如下内容后保存退出

admin.serverPort=9999

在这里插入图片描述

⑦切换到bin目录下,启动zookeeper,关闭zookeeper

切换bin目录

cd ..
cd bin

启动zookeeper

./zkServer.sh start

关闭zookeeper

./zkServer.sh stop

在这里插入图片描述

第五章、dubbo使用注册中心

5.1)项目加入zookeeper客户端依赖

每个模块均要加入如下代码

<!-- zookeeper客户端依赖 -->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>4.1.0</version>
</dependency>

5.2)配置文件修改

服务提供者和消费者均要加入注册中心

 <dubbo:registry address="zookeeper://192.168.52.128:2181" check="false"></dubbo:registry>

直连的服务配置修改为注册中心方式

    <!--暴露服务-->
    <dubbo:service interface="com.bjpowernode.dubbo.service.UserInfoService"
                   ref="userInfoServiceImpl"  retries="2"  timeout="20000"
                   version="1.36"

    ></dubbo:service>

5.3)dubbo其他配置

①关闭检查

 <dubbo:registry address="zookeeper://192.168.52.128:2181" check="false"></dubbo:registry>

②重试次数

<dubbo:service retries="2" /><dubbo:reference retries="2" />

③超时时间
由于网络或服务端不可靠。为了避免超时导致客户端资源(线程)挂起耗尽,必须设置超时时间。

dubbo消费端
指定接口超时配置
<dubbo:reference interface="com.foo.BarService" timeout="2000" />
dubbo服务端
指定接口超时配置
<dubbo:server interface="com.foo.BarService" timeout="2000" />

④版本号
服务提供者增加版本号

    <!--暴露服务-->
    <dubbo:service interface="com.bjpowernode.dubbo.service.UserInfoService"
                   ref="userInfoServiceImpl"  retries="2"  timeout="20000"
                   version="2.0.0"

    ></dubbo:service>

服务消费者增加版本号

  <dubbo:reference
            id="remoteUserInfoService2"
            interface="com.bjpowernode.dubbo.service.UserInfoService"
            version="2.0.0"
    />

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

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

相关文章

Java课题笔记~ 日期处理

2.8 日期处理 2.8.1 日期注入 日期类型不能自动注入到方法的参数中。需要单独做转换处理。 使用DateTimeFormat注解&#xff0c;需要在springmvc.xml文件中添加mvc:annotation-driven/标签。 &#xff08;1&#xff09;在方法的参数上使用DateTimeFormat注解 RequestMappi…

浅谈SPA

1. 基本概念 ● SPA(single-page application) 单页应用,默认情况下我们编写Vue,React都只有一个html页面并且提供一个挂载点,最终打包后会在此页面中引入对应的资源.(页面渲染全部由js动态进行渲染).切换页面时通过监听路由变化,渲染对应的页面(client side rendering,客户端…

探秘分布式大数据:融合专业洞见,燃起趣味火花,启迪玄幻思维

文章目录 一 数据导论二 大数据的诞生三 大数据概论3.1 大数据的5V特征3.2 大数据的工作核心 四 大数据软件生态4.1 数据存储软件4.2 数据计算软件4.3 数据传输软件 五 Apache Hadoop概述5.1 Apache Hadoop框架5.2 Hadoop的功能5.3 Hadoop的发展5.4 Hadoop发行版本 一 数据导论…

使用Python批量将Word文件转为PDF文件

说明&#xff1a;在使用Minio服务器时&#xff0c;无法对word文件预览&#xff0c;如果有需要的话&#xff0c;可以将word文件转为pdf文件&#xff0c;再存储到Minio中&#xff0c;本文介绍如果批量将word文件&#xff0c;转为pdf格式的文件&#xff1b; 安装库 首先&#xff…

由于找不到msvcp140.dll无法继续执行代码是什么原因

使用计算机过程中&#xff0c;有时会遇到一些错误提示&#xff0c;其中之一就是关于msvcp140.dll文件丢失或损坏的错误。msvcp140.dll是Windows系统中非常重要的文件&#xff0c;是Microsoft Visual C Redistributable中动态链接库的文件&#xff0c;如果缺失或损坏&#xff0c…

Git 入门到熟悉

一、版本控制 1.1 什么是版本控制 版本控制&#xff08;Revision control&#xff09;是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。简单说就是用于管理多人协同开…

管理类联考——逻辑——真题篇——按知识分类——汇总篇——一、形式逻辑——三段论——第二节 规则

文章目录 第二节 三段论-规则题-三段论-规则-补前提-“特推特&#xff0c;否推否&#xff0c;两特两否无结论”得前提是“有的/所有”→所有概念出现两次→中项要周延。题-三段论-规则-补前提-“特推特&#xff0c;否推否&#xff0c;两特两否无结论”得前提是“有的/所有”→…

css 文字排版-平铺

序&#xff1a; 1、表格的宽度要有&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 2、容器不能是display:inline 3、扩展---》node全栈框架 代码 text-align-last: justify; width: 70px; display: inline-block; 主要是用于表单左侧文字排序&#xff01;

AI如何看待能力,学历,文凭

1 假设&#xff1a; {文凭}⊂{学历}⊂{能力} 2 证明&#xff1a; 首先&#xff0c;我们需要明确这些集合的定义和关系。 {能力}是一个包含各种能力的集合&#xff0c;例如学习能力、沟通能力、创新能力、领导能力和专业技能等。 {学历}是一个包含各种学历的集合&#xff0c…

ps安装找不到msvcp140.dll,分享msvcp140.dll丢失三个修复方法

当在安装PS&#xff08;Adobe Photoshop&#xff09;时遇到找不到msvcp140.dll的错误提示时&#xff0c;我首先感到有些困惑&#xff0c;因为这个错误可能会影响我使用某些程序或软件。但是&#xff0c;通过尝试不同的修复方法&#xff0c;我发现问题可以得到解决。 首先缺失ms…

Linux多线程【初识线程】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 &#x1f307;前言&#x1f3d9;️正文1、什么是线程&#xff1f;1.1、基本概念1.2、线程理解1.3、进程与线程的关系…

[oneAPI] Neural Style Transfer

[oneAPI] Neural Style Transfer oneAPINeural Style Transfer特殊环境定义使用包加载数据Neural Style Transfer模型与介绍训练过程结果 比赛&#xff1a;https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel DevCloud for oneAPI&#xff1a;https://devcl…

1609.奇偶数

目录 一、题目 二、代码 三、完整测试代码 一、题目 1609. 奇偶树 - 力扣&#xff08;LeetCode&#xff09; 二、代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0),…

【大数据Hive】hive 事务表使用详解

目录 一、前言 二、Hive事务背景知识 hive事务实现原理 hive事务原理之 —— delta文件夹命名格式 _orc_acid_version 说明 bucket_00000 合并器(Compactor) 二、Hive事务使用限制 参数设置 客户端参数设置 客户端参数设置 三、Hive事务使用操作演示 操作步骤 客…

电脑msvcr120.dll丢失怎么修复,msvcr120.dll怎么安装?

msvcr120.dll是Microsoft Visual C Redistributable的一部分&#xff0c;它是Windows操作系统中的一个动态链接库文件。这个文件包含了一些用于C编程的函数和资源&#xff0c;它们被许多应用程序用于提供特定的功能和服务。如果你在运行某个程序时遇到了缺少msvcr120.dll的错误…

AlexNet中文翻译

ImageNet classification with deep convolutional neural networks 原文链接&#xff1a;https://dl.acm.org/doi/abs/10.1145/3065386 目录 使用深度卷积神经网络进行 ImageNet 分类 摘要 1 简介 2 数据集 3 架构 3.1 ReLU非线性 3.2 多GPU上的训练 3.3 局部响应标准化 3.4 重…

centos安装elasticsearch7.9

安装es 下载elasticsearch安装包解压安装包,并修改配置文件解压进入目录修改配置文件 添加用户&#xff0c;并修改所有者切换用户&#xff0c;运行es如何迁移旧版本的数据 下载elasticsearch安装包 下载地址如下&#xff0c;版本号可以替换成自己想要的。 这里需要注意一点&am…

讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?

同时向讯飞星火、文心一言和通义千问三个国产AI模型提个相同的问题&#xff1a; “python 写一个贪吃蛇的游戏代码” 看哪一家AI写的程序直接能用&#xff0c;谁就胜出&#xff01; 讯飞星火 讯飞星火给出的代码&#xff1a; import pygame import sys import random# 初…

上海亚商投顾盘:沪指震荡反弹 机器人概念股掀涨停潮

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日震荡反弹&#xff0c;科创50盘中涨超1%。机器人概念股掀涨停潮&#xff0c;通力科技、昊志机电、哈焊…

java接口导出csv

1、背景介绍 项目中需要导出数据质检结果&#xff0c;本来使用Excel&#xff0c;但是质检结果数据行数过多&#xff0c;导致用hutool报错&#xff0c;因此转为导出csv格式数据。 2、参考文档 https://blog.csdn.net/ityqing/article/details/127879556 工程环境&#xff1a;…