Spring Cloud Alibaba Dubbo(服务远程调用)

news2024/12/27 13:14:43

一、软件环境

(1)自己部署服务器

所有软件及服务器自己进行管理提供,可以直接在项目中添加Spring Cloud依赖。推荐 

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>{project-version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

(2)使用阿里云

如果希望使用阿里云服务。则需要导入阿里云对应的依赖。 不推荐  

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>aliyun-spring-boot-dependencies</artifactId>
            <version>{project-version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement> 

 二、核心组件

Spring Cloud Alibaba和 Spring Cloud Netflix 同属于Spring Cloud 下三大阵营产品之一。内部提供了一系列组件。

(1)Spring Cloud Alibaba Nacos Discovery

Nacos是由阿里巴巴推出的用于构建云本机应用程序的易于使用的动态服务发现,配置和服务管理平台。

Nacos Discovery 是使用Nacos的服务注册与发现功能。在Spring Cloud Alibaba中常使用Nacos作为注册中心

(2) Spring Cloud Alibaba Nacos Config

Nacos Config 是利用Nacos作为分布式配置中心使用。

(3) Spring Cloud Alibaba Sentinel

Sentinel是Spring Cloud Alibaba体系中提供服务限流,断路和负载保护的解决方案。已经成功的在阿里巴巴双十一活动中运行10余年。可靠性非常高。

(4) Spring Cloud Alibaba Dubbo

Dubbo 是阿里巴巴于2011年对外提供使用的RPC框架。使用他可以实现接口发布和接口调用功能,内部还提供了负载均衡等策略。是国内使用较多的服务调用框架

从2.7版本开始阿里巴巴把Dubbo贡献给Apache。

Spring Cloud Alibaba Dubbo是基于Dubbo-spring-boot-starter 2.7的封装,可以让Dubbo程序员几乎零成本的学习。

(5)Spring Cloud Alibaba Cloud ANS

ANS(应用程序命名服务)是EDAS(企业级分布式应用服务,平时所说的阿里云)的组件。使用ANS可以使用直接在阿里云部署好的Nacos Discover应用

(6)Spring Cloud Alibaba Cloud ACM

Spring Cloud AliCloud ACM是Spring Cloud客户端上商业产品应用程序配置管理(ACM)的实现,并且是免费的。

使用Spring Cloud AliCloud ACM可基于Spring Cloud的编程模型快速访问ACM配置管理功能。

ACM就是阿里云中Nacos Config的实现

(7)Spring Cloud Alibaba Cloud OSS

OSS(对象存储服务)是阿里云上的存储产品。Spring Cloud阿里云OSS提供符合Spring Cloud规范的商业化存储服务。我们提供易于使用的API,并支持将Resource集成到Spring框架中。

OSS其实就是阿里云中类似FastDFS的实现

(8)Spring Cloud Alibaba Cloud SchedulerX

SchedulerX(分布式作业调度)是阿里云产品EDAS的组件。Spring Cloud Alibaba Cloud SchedulerX提供符合Spring Cloud规范的分布式作业调度。SchedulerX提供具有几秒钟的高精度,高稳定性和高可用性的定时作业调度服务,并支持多种作业类型,例如简单的单服务器作业,简单的多主机作业,脚本作业和网格作业。

(9)Spring Cloud Alibaba Cloud SMS

SMS(短消息服务)是一种覆盖全球的消息服务,阿里巴巴SMS提供便捷,高效和智能的通信功能,可帮助企业快速联系其客户。

Spring Cloud Alibaba Cloud SMS提供了易于使用的API,可基于Spring Cloud Alibaba SMS快速访问Alibaba Cloud的SMS服务。

三、RPC简介

(1)RFC

RFC(Request For Comments) 是由互联网工程任务组(IETF)发布的文件集。文件集中每个文件都有自己唯一编号,例如:rfc1831。目前RFC文件由互联网协会(Internet Society,ISOC)赞助发行。

RPC就收集到了rfc 1831中。可以通过下面网址查看:

RFC 1831 - RPC: Remote Procedure Call Protocol Specification Version 2RFC 1831 - RPC: Remote Procedure Call Protocol Specification Version 2 RFC 1831 - RPC: Remote Procedure Call Protocol Specification Version 2

(2)RPC

RPC在rfc 1831中收录 ,RPC(Remote Procedure Call) 远程过程调用协议

RPC协议规定允许互联网中一台主机程序调用另一台主机程序,而程序员无需对这个交互过程进行编程。在RPC协议中强调当A程序调用B程序中功能或方法时,A是不知道B中方法具体实现的。 ​

RPC是上层协议,底层可以基于TCP协议,也可以基于HTTP协议。一般我们说RPC都是基于RPC的具体实现,如:Dubbo框架。从广义上讲只要是满足网络中进行通讯调用都统称为RPC,甚至HTTP协议都可以说是RPC的具体实现,但是具体分析看来RPC协议要比HTTP协议更加高效,基于RPC的框架功能更多。

​ RPC协议是基于分布式架构而出现的,所以RPC在分布式项目中有着得天独厚的优势。基于RPC协议推出了一些框架(Dubbo),慢慢发展甚至出现了一种架构方式叫做RPC架构。RPC架构特点:一定是A项目调用B项目,调用过程中使用RPC协议

 (3)RPC和HTTP对比

1.具体实现

RPC:可以基于TCP协议,也可以基于HTTP协议。

HTTP:基于HTTP协议

2.效率

RPC:自定义具体实现可以减少很多无用的报文内容,使得报文体积更小。

HTTP:如果是HTTP 1.1 报文中很多内容都是无用的。如果是HTTP2.0以后和RPC相差不大,比RPC少的可能就是一些服务治理等功能。

 3.连接方式

RPC:长连接、短链接都支持。阻塞连接、非阻塞连接都支持。

HTTP:每次连接都是3次握手。Http2.0开始支持长连接。

4.序列化性能

RPC可以基于很多序列化方式。如:thrift

HTTP 主要是通过JSON,序列化和反序列效率更低。

5.注册中心

RPC :一般RPC框架都支持注册中心。

HTTP:都是直连。

6.负载均衡

RPC:绝大多数RPC框架都带有负载均衡工具。

HTTP:一般都需要借助第三方工具。如:nginx

7.综合结论

RPC框架一般都带有丰富的服务治理等功能,更适合企业内部接口调用。

HTTP更适合多平台之间相互调用。

四、Dubbo架构

Apache Dubbo 是一个高可用的,基于Java的开源RPC框架。

Dubbo框架不仅仅是具备RPC访问功能,还包含服务治理功能(注册中心,负载均衡、容灾等)。

 

(1)虚实线

虚线表示异步,实线表示同步。异步不阻塞线程性能高,同步阻塞线程必须等待响应结果才能继续执行,相对性能低。

(2)Provider

提供者(RPC被调用方)。开发中是一个独立项目,一般编写持久层、业务层和事务控制代码等。

(3) Consumer

消费者(RPC调用方)。开发中是一个独立项目,编写控制层、服务层、视图层等。

(4) Container

容器(Spring容器),Dubbo完全基于Spring实现的。

(5) Registry

注册中心。放置所有Provider对外提供的信息。包含Provider的IP,访问端口,访问遵守的协议,对外提供的接口,接口中有哪些方法等相关信息。

(6) Monitor

监控中心。监控Provider的压力情况等。每隔2分钟Consumer和Provider会把调用次数发送给Monitor,由Monitor进行统计。

(7)执行流程说明

  1. 0 : start:启动Spring容器时会把Provider启动。

  2. 1 : register:把Provider相关信息注册到Registry里

  3. 2 : subscribe:Consumer从Registry中订阅Provider的信息

  4. 3 : notify:通知给Consumer

  5. 4 : invoke:Consumer根据Registry通知的信息进行调用Provider中方法。

  6. 5 : count:Consumer和Provider把调用次数信息异步发送给Monitor进行统计。

五、Dubbo支持的协议

(1)Dubbo协议(官方推荐协议

  • 优点: 采用NIO复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好(推荐使用)

  • 缺点: 大文件上传时,可能出现问题(不使用Dubbo文件上传)

 (2)关于NIO、BIO、AIO的区别

  1. NIO JDK 1.4 推出的。同步非阻塞。执行代码时必须等IO操作结束才能执行下一行代码(同步),但是允许并发IO操作(非阻塞)

  2. BIO 同步阻塞。执行代码时必须等IO操作结束才能执行下一行代码(同步),不允许并发IO操作(阻塞)

  3. AIO JDK1.7 推出的。异步非阻塞。执行代码时IO操作代码可以相当于忽略直接执行下一行代码(异步),允许并发IO操作(非阻塞)

 (3)RMI(Remote Method Invocation)协议

  • 优点: JDK自带的能力。

  • 缺点: 偶尔连接失败.

 (4)Hessian协议

  • 优点: 可与原生Hessian互操作,基于HTTP协议

  • 缺点: 需hessian.jar支持,http短连接的开销大

 六、Dubbo支持的注册中心

1. Zookeeper

  • 优点: 支持分布式.很多周边产品.

  • 缺点: 受限于Zookeeper软件的稳定性.Zookeeper专门分布式辅助软件,稳定较优

2. Nacos

  • 优点: 阿里自身注册中心,无缝集成。除此还支持配置中心等。

3. Multicast

  • 优点: 去中心化,不需要单独安装软件.

  • 缺点: Provider和Consumer和Registry不能跨机房(路由)

4. Redis

  • 优点: 支持集群,性能高

  • 缺点: 要求服务器时间同步.否则可能出现集群失败问题.

5. Simple

  • 优点: 标准RPC服务.没有兼容问题

  • 缺点: 不支持集群

七、Zookeeper安装

(1)拉取镜像

docker pull zookeeper:3.5.5

(2)创建并运行容器

docker run -d -p 2181:2181 --name zookeeper --restart always zookeeper:3.5.5

 (3)连接测试

 docker exec -it zookeeper bash
zkCli.sh

或者

docker exec -it zookeeper zkCli.sh

八、常用命令

(1)连接

docker exec -it zookeeper zkCli.sh

docker exec -it zookeeper zkCli.sh -server localhost:2181

(2)退出

quit

(3)查看Zookeeper中的键

 ls /

查看Zookeeper中的所有键

ls -R /

(4)查看Zookeeper中的value值

get /test

(5)设置Zookeeper中的键值对

 set /test newValue

(6)创建Zookeeper中的键值对

create /test value

create /testNoValue

(7)删除Zookeeper中的键值对

删除某一个指定的节点。此节点下,不能有任何子节点。

 delete /path

删除某一个指定的节点,此节点下,可以有子节点

deleteall /path

九、ZooKeeper和Eureka对比

对比项ZookeeperEureka备注
CAPCPAP
Dubbo支持已支持-
Spring Cloud支持已支持已支持
kv服务支持-ZK支持数据存储,eureka不支持
使用接口(多语言能力)提供客户端(zkClient、Curator)http协议(跨语言)ZK的跨语言支持比较弱
watch支持支持支持什么是Watch支持?就是客户端 监听服务端的变化情况。 zk通过订阅监听来实现 eureka通过轮询的方式来实现
集群监控_metricsmetrics,运维者可以收集并报警这些度量信息达到监控目的

 十、使用

(1)导入依赖

    <!-- dubbo启动器 -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>3.0.4</version>
    </dependency>
    <!-- apache 提供的zookeeper客户端访问框架 -->
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>5.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>5.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-x-discovery</artifactId>
        <version>5.1.0</version>
    </dependency>

(2)编辑配置文件

server:
  port: 8001
spring:
  application:
    name: dubbo-contact-mgr
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai
    username: root
    password: root
# dubbo相关配置。
dubbo:
  application: # 注意:部分低版本dubbo中。dubbo.application.id必要。
    id: dubbo-contact-mgr # 可选配置,dubbo服务的唯一命名。默认${dubbo.application.name}
    name: dubbo-contact-mgr # 必要配置,dubbo服务的唯一命名。
  registry: # 配置注册中心地址。必要配置。
    address: zookeeper://192.168.8.128:2181  # 注册中心地址
    timeout: 300000  # 超时配置
  protocol: # dubbo的provider启动后,监听什么端口,处理什么协议。
    name: dubbo # dubbo协议。默认值。推荐使用。
    port: 20881 # provider监听的端口。默认值20880。

(3)在被远程调用的服务实现类上添加@DubboService注解

@DubboService
public class ContactAPIImpl implements ContactAPI {
    @Autowired
    private ContactMapper contactMapper;

    @Override
    @Transactional
    public int addContact(Contact contact) {
        System.out.println("新增联系方式:" + contact.toString());
        // 保证主键一定存在。
        if(contact.getId() == null){
            contact.setId(System.currentTimeMillis());
        }
        return contactMapper.insert(contact);
    }
}

(4)使用@DubboReference在需要远程调用注入被远程调用的接口

@DubboService
public class StudentAPIImpl implements StudentAPI {
    @Autowired
    private StudentMapper studentMapper;

    @DubboReference
    private ContactAPI contactAPI;

    /**
     * 新增学生的同时,判断参数contactType和contact是否都存在。
     * 如果都存在,则调用远程微服务contact,新增联系方式。
     * @param student
     * @param contactType 联系方式种类
     * @param contact 联系方式
     * @return
     */
    @Override
    @Transactional
    public int addStudent(Student student, String contactType, String contact) {
        // 如果学生数据无主键,使用当前时间戳赋值
        if(student.getId() == null){
            student.setId(System.currentTimeMillis());
        }

        int rows = studentMapper.insert(student);

        // 新增学生成功。检查参数联系方式
        if((contact != null && contact.trim().length() > 0) &&
                (contactType != null && contactType.trim().length() > 0)){
            System.out.println(contactAPI.getClass().getName());
            // 参数联系方式和联系方式种类,都存在。准备调用远程服务。
            // 创建联系方式对象
            Contact contactObj = new Contact();
            contactObj.setContact(contact);
            contactObj.setContactType(contactType);
            contactObj.setId(System.currentTimeMillis());
            contactObj.setStudentId(student.getId());
            // 新增联系方式
            contactAPI.addContact(contactObj);
        }


        return rows;
	}
}

十一、负载均衡策略

 (1) Random

随机。随机访问集群中节点。访问概率和权重有关。 默认

(2)RoundRobin

轮询。访问频率和权重有关。 ​ 权重(weight):占有比例。集群中每个项目部署的服务器的性能可能是不同,性能好的服务器权重应该高一些。

(3)LeastActive

活跃数相同的随机,不同的活跃数高的放前面。

(4)ConsistentHash

一致性Hash。相同参数请求总是发到一个提供者。

 十二、自定义负载均衡策略

(1)@DubboService注解

 /**
 * dubbo服务提供者
 * DubboService - 负载均衡配置
 *  loadbalance - 负载均衡策略
 *  weight - 权重
 *  在dubbo中。provider可以设置负载均衡策略。默认采用随机策略。
 *  设置后,启动注册到注册中心。服务的消费者发现服务后,默认采用provider定义的负载均衡策略和权重。
 */
@DubboService(loadbalance = "roundrobin", weight = 1)

(2)@DubboReference注解

/**
 * dubbo服务消费者者
 * DubboReference - 负载均衡配置
 *  loadbalance - 负载均衡策略
 *  在dubbo中。服务的消费者没有默认负载均衡策略。当服务消费者发现服务提供者后,采用provider配置的负载均衡策略和权重。如果服务消费者配置了负载均衡策略,则忽略provider配置的负载均衡策略和权重。
 */
@DubboReference(loadbalance = "random")

(3)基于配置文件设置负载均衡策略

dubbo:
  provider: # 给当前应用中所有的服务提供者配置共性
    loadbalance: roundrobin # 所有provider的默认负载均衡策略是什么。默认为random
    weight: 3 # 所有provider节点的权重是多少。默认-1
  consumer: # 给当前应用中所有的服务消费者配置共性
    loadbalance: random # 所有的服务消费者默认负载均衡策略是什么。 

 十三、先启动Consumer解决办法

(1)基于注解的解决办法

 @DubboReference(check = false)

(2)基于配置文件的解决办法

dubbo:
  consumer: # 给当前应用中所有的服务消费者配置共性
    check: false # 所有的服务消费者,启动时不创建provider代理对象。使用时重新发现并创建代理。

十四、配置dubbo协议的payload

Dubbo框架在使用dubbo协议实现远程服务调用的时候,默认限制请求和应答数据最大为8M。如果超出范围则抛出异常。可以通过配置设置payload容量。下述配置只提供对应的部分配置内容

dubbo: 

  protocol: 
    payload: 838860800 # 配置请求响应传输的数据最大容量,不建议修改。默认8M

十五、分组注册和服务多版本发布  

Dubbo框架支持服务分组注册和服务多版本发布。即相同的接口发布的服务,也可以用组来维护。且可以同时提供若干不同版本的服务提供者实现。

(1)@DubboService注解

 @DubboService(group = "test", version = "1.0")

(2)@DubboReference注解

注意:当Provider注册服务时,约束了分组或版本,Consumer则必须提供相应配置,否则无法发现服务。配置如下: 

 @DubboReference(group = "test", version = "1.0")

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

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

相关文章

liunx centos9中安装flask并在pycharm中使用图文攻略

liunx centos9中安装flask并在pycharm中使用图文攻略1.首先在liunx的终端中输入2.安装好flask之后就在pycharm创建新的项目处添加flask项目3.点击绿色三角箭头开始运行flask项目4. 然后登录ip地址就出现Hllo world就代表flask环境搭建完成需要注意事项1.首先在liunx的终端中输入…

ngx_thread_pool_init()

ngx_thread_pool_cycle()函数的主要工作是从待处理的任务队列中获取一个任务&#xff0c;然后调用任务对象的handler()函数处理任务&#xff0c;完成后把任务放置到完成队列中&#xff0c;并通过ngx_notify()通知主线程 手写线程池与性能分析 - 知乎 pthread_cond_wait函数的原…

【5G RRC】5G系统消息介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

一键绕过ID锁激活,为什么很多人都会失败?绕ID这一篇就够了

最近阳了所以暂时断更&#xff0c;你们也要注意身体&#xff0c;最好不要阳 现在绕ID的方法已经非常完善&#xff0c;一个小白选手只要有设备就可以正常绕过ID&#xff0c;总的来说绕ID分为两个步骤&#xff1a;第一步是手机的越狱&#xff0c;这里只能是用checkra1n越狱&…

数据在内存中存储☞(超详解)

目录 一.数据类型大家族 1.了解类型的意义 2.数据类型大家族的分类 二.详解☞数据储存之整形 1.储存方式 &#xff08;1&#xff09;.原码反码补码的概念 &#xff08;2&#xff09;.原码反码补码出现的原因&#xff1a; 计算机中只有加法器没有减法器&#xff0c;所有只…

SemanticKITTI: A Dataset for Semantic Scene Understanding of LiDAR Sequences

Paper name SemanticKITTI: A Dataset for Semantic Scene Understanding of LiDAR Sequences Paper Reading Note URL: https://arxiv.org/pdf/1904.01416.pdf TL;DR 2019 ICCV 论文&#xff0c;提出了一个大规模的真实场景 LiDAR 点云标注数据集 SemanticKITTI&#xff…

数字信号处理第六次试验:数字信号处理在双音多频拨号系统中的应用

数字信号处理第六次试验&#xff1a;数字信号处理在双音多频拨号系统中的应用前言一、实验目的二、实验原理和方法1.关于双音多频拨号系统2.电话中的双音多频&#xff08;DTMF&#xff09;信号的产生与检测3.检测DTMF信号的DFT参数选择4.DTMF信号的产生与识别仿真实验三、实验内…

菜鼠的保研总结

1.个人基本情况 本科学校&#xff1a;山东某双非 本科专业&#xff1a;网络工程 成绩排名&#xff1a;1/46 英语成绩&#xff1a;四级529&#xff0c;六级502 科研竞赛&#xff1a;美国大学生数学建模比赛特等奖提名、全国英语翻译比赛三等奖、山东省蓝桥杯java大学生B组三等奖…

C++基础:KMP

让我们先看一个问题&#xff1a;给定一个字符串 S&#xff0c;以及一个模式串 P&#xff0c;所有字符串中只包含大小写英文字母以及阿拉伯数字。模式串 P 在字符串 S 中多次作为子串出现。求出模式串 P 在字符串 S 中所有出现的位置的起始下标。输入格式第一行输入整数 N&#…

【Python】杨辉三角中的排成一列编号的问题

题目描述 下面的图形是著名的杨辉三角形&#xff1a; 如果我们按从上到下、从左到右的顺序把所有数排成一列&#xff0c;可以得到如下数列&#xff1a; 1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,⋯ 给定一个正整数 N&#xff0c;请你输出数列中第一次出现 N是在第几个数&#xff1f; …

Go语言设计与实现 -- 内存管理器

不同的编程语言选择不同的方式管理内存&#xff0c;本节会介绍Go语言内存分配器。 Go内存分配的设计思想是&#xff1a; 内存分配算法采用Google的TCMalloc算法&#xff0c;每个线程都会自行维护一个独立的内存池&#xff0c;进行内存分配时优先从该内存池中分配&#xff0c;…

第十八章Vue的学习

文章目录什么是VueVue.js的官网介绍环境配置基本语法声明式渲染绑定元素属性双向数据绑定条件渲染列表渲染事件驱动侦听属性Vue对象生命周期什么是Vue 对于Java程序来说&#xff0c;我们使用框架就是导入那些封装了**『固定解决方案』的jar包&#xff0c;然后通过『配置文件』…

CSS3 之选择器

文章目录1、关系性选择器&#xff1a;EFE~F2、属性选择器3、伪元素选择器4、伪类选择器(被选中的元素的一个种状态)calc1、关系性选择器&#xff1a;EFE~F 2、属性选择器 E[attr~“val”]E[attr|“val”]E[attr^“val”]E[attr$“val”]E[attr*“val”]3、伪元素选择器 E::pl…

CesiumLab对BIM模型的输入格式要求 CesiumaLab系列教程

BIM 模型和手工模型最大的区别在于几点&#xff1a; 1.建模目标不同&#xff0c;手工模型的目的是为了可视化&#xff0c;就是为了看的见&#xff0c;看不见的东西能省则省。BIM 完全是按照一些工程标准去创建的&#xff0c;比如路面可能有多个层代表了不同的物理层。手工模型…

windows编译Paraview源码

目录一. 环境准备二. 编译1. CMake2. Visual Studio一. 环境准备 下载基本所需&#xff1a; paraview官方给了编译文档&#xff1a;https://github.com/Kitware/ParaView/blob/master/Documentation/dev/build.md 所需要的基础有&#xff1a; 如图&#xff1a;&#xff08;进入…

2022我的年度总结-- AI遮天之路

我是一个普普通通的大学生&#xff0c;我的博客记录了我学习编程以来共计1年多的水平&#xff0c;我希望能把自己大学的经历、选择、困惑等与同样身处大学&#xff0c;选择AI方向不知如何发展的人进行分享&#xff0c;因此写了这篇年终总结。另外&#xff0c;对于一些刚刚开始写…

重磅!华为更新职业认证架构刷新和重认证规则

尊敬的各位朋友&#xff0c;感谢您一直以来对华为认证的支持&#xff01; 为匹配华为公司未来长期战略&#xff0c;紧随ICT技术演进趋势&#xff0c;自2023年1月1日起&#xff0c;华为职业认证将启用全新的架构体系和重认证规则&#xff0c;请您关注。 华为职业认证架构刷新 …

新年新希望--爱摸鱼的美工(12)

年近了&#xff0c;上班途中依然匆忙 看女孩子们渐渐开始倒腾 做了新发型&#xff0c;做了美美的指甲 换上了新衣服&#xff0c;买了新包 电话里讨论着 去哪里过年&#xff0c;买什么年货 好像以前的我也这样 今年挣得少了&#xff0c;不想添新衣&#xff08;不能&#xff09; …

【条理清晰】在 Windows 上安装 MySQL

下载 MySQL 安装程序安装 MySQL 数据库安装示例数据库下载 MySQL 安装程序 在本教程中&#xff0c;我们展示如何在 Windows 平台上下载和安装 MySQL 的详细步骤。 在 Windows 平台上安装 MySQL 很简单&#xff0c;并不需要太复杂的步骤。按照本文的步骤操练起来就可以了。 我…

一体化Ethercat通信伺服电机在汇川H5U PLC上的应用案例介绍(下)

内容介绍了一体化低压伺服Ethercat通信的电机在汇川H5UPLC上的使用&#xff0c;一体化Ethercat通信伺服电机在汇川H5U PLC上的应用案例介绍(上)主要讲解环境的搭建以及使用AutoShop软件的在线调试功能&#xff0c;简单控制电机位置、速度模式运行。那么本篇我们就来讲解下使用汇…