图解Dubbo,Dubbo 服务治理详解
目录
- 一、介绍
- 1、介绍 Dubbo 服务治理的基本概念和重要性
- 2、阐述 Dubbo 服务治理的实现方式和应用场景
- 二、Dubbo 服务治理的原理
- 1、Dubbo 服务治理的架构设计
- 2、Dubbo 服务治理的注册与发现机制
- 3、Dubbo 服务治理的负载均衡算法
- 三、Dubbo 服务治理的实现方式
- 1、基于 Docker 容器的 Dubbo 服务治理
- (1)安装 Docker
- (2)创建 Docker Compose 文件
- (3)启动 Docker Compose
- (4)查看 Dubbo 服务
- (5)部署 Dubbo 服务到云环境
- (6)测试 Dubbo 服务
- 2、基于 Kubernetes 容器编排的 Dubbo 服务治理
- (1)安装 Kubernetes
- (2)创建 Kubernetes Deployment
- (3)创建 Kubernetes Service
- (4)创建 Kubernetes ConfigMap
- (5)创建 Kubernetes Secret
- (6)创建 Kubernetes Ingress
- (7)测试 Dubbo 服务
- 3、基于云原生架构的 Dubbo 服务治理
- (1)安装云原生基础设施
- (2)创建 Kubernetes Deployment
- (3)创建 Kubernetes Service
- (4)创建 Kubernetes ConfigMap
- (5)创建 Kubernetes Secret
- (6)创建 Kubernetes Ingress
- (7)测试 Dubbo 服务
- 四、Dubbo 服务治理的应用场景
- 1、微服务架构中的 Dubbo 服务治理
- 2、分布式系统中的 Dubbo 服务治理
- 五、Dubbo 服务治理的优化措施
- 1、提高 Dubbo 服务治理的可用性和高并发处理能力
- 2、优化 Dubbo 服务治理的性能和带宽消耗
- 3、增强 Dubbo 服务治理的安全性和可靠性
- Dubbo系列文章
大家好,我是哪吒。
当前,分布式服务在互联网行业中得到了广泛应用。然而,分布式服务不仅仅是将单个应用程序分割成不同的模块,还涉及到模块之间的相互合作和协作。
服务治理是分布式服务的一个关键问题,因为它可以帮助开发人员管理不同的服务、协调不同的组件和确保服务的可用性和可靠性。Dubbo 服务治理可以快速实现不同服务之间的通信和调用,因此被广泛应用。
本文将详细介绍
- Dubbo 服务治理的架构设计
- 注册与发现机制
- 负载均衡算法、实现方式、应用场景和优化措施。
通过本文,读者可以更深入地了解 Dubbo 服务治理的内部结构和工作原理,并且学习到如何应用 Dubbo 服务治理来管理和调度分布式系统中的服务。
一、介绍
1、介绍 Dubbo 服务治理的基本概念和重要性
Dubbo 服务治理是一种服务管理和协调的解决方案,它主要是为分布式系统提供服务管理、服务调度、服务监控、服务负载均衡等功能。
Dubbo 服务治理可以有效地管理和调度分布式系统中的服务,通过提供丰富的管理工具可以方便地实现服务的监控、调度和负载均衡等功能。在分布式系统中,Dubbo 服务治理可以提供一种方式,让不同的应用程序通过调用远程服务实现互联互通。
以下是一个简单的 Dubbo 服务治理的时序图,展示了 Dubbo 服务注册、发现和调用的过程:
在这个时序图中,Client 是服务的消费者,Registry 是服务注册中心,Provider1 和 Provider2 是服务的提供者。整个过程分为三个步骤:
- 服务发现:Client 向 Registry 发起服务发现请求,Registry 返回可用的服务列表。
- 服务调用:Client 向 Provider1 发起服务调用请求,Provider1 返回结果;接着 Client 向 Provider2 发起服务调用请求,Provider2 返回结果。
- 结果返回:Provider1 和 Provider2 返回结果给 Client。
Dubbo 服务治理的重要性在于,它可以帮助开发人员管理和协调不同的服务和组件,并确保服务的可用性和可靠性。通过 Dubbo 服务治理,开发团队可以通过一个单一的入口管理所有服务,这对于大规模分布式服务的管理非常重要。
2、阐述 Dubbo 服务治理的实现方式和应用场景
Dubbo 服务治理可以分为两种类型:基础服务治理和应用服务治理。
- 基础服务治理 主要针对基础组件提供服务治理的解决方案,如注册中心、监控中心等。
- 应用服务治理 主要针对业务服务提供服务治理的解决方案,如服务的调度、负载均衡、容错等。
Dubbo 服务治理的实现方式包括:
- 基于 Docker 容器的 Dubbo 服务治理
- 基于 Kubernetes 容器编排的 Dubbo 服务治理
- 基于云原生架构的 Dubbo 服务治理。
基于 Docker 容器的 Dubbo 服务治理可以方便地部署和管理 Dubbo 服务,不需要人工干预。
基于 Kubernetes 容器编排的 Dubbo 服务治理可以更加灵活地管理 Dubbo 服务,同时还支持容器的自动弹性伸缩和故障自愈的功能。
基于云原生架构的 Dubbo 服务治理可以通过云平台来实现弹性伸缩、高可用性、灰度发布等功能,这为 Dubbo 服务的管理和部署带来了极大的便利。
Dubbo 服务治理广泛应用于微服务架构、分布式系统和大型企业等场景中。
在微服务架构中,Dubbo 服务治理可以帮助开发人员快速构建分布式应用,通过服务治理机制可以方便地管理和协调不同的服务。
在分布式系统中,Dubbo 服务治理可以确保系统的高可用性和可靠性。在大型企业中,Dubbo 服务治理可以帮助企业更好地管理和调度分布式系统中的服务,提高业务处理的效率。
二、Dubbo 服务治理的原理
1、Dubbo 服务治理的架构设计
Dubbo 服务治理的架构设计主要包括注册中心、服务消费者和服务提供者三个部分。
- 注册中心 是一个分布式的注册表,可以存储服务提供者的地址、版本等信息。
- 服务消费者 可以从注册中心查找服务提供者的位置和信息,并发起请求。
- 服务提供者 是一个分布式集群,可以提供服务,并支持负载均衡和容错机制。
服务消费者和服务提供者之间采用消息队列进行通信,可以支持异步处理和消息缓存等功能。
以上是 Dubbo 服务治理的架构设计的 UML 类图。其中:
- Registry 表示注册中心,包括注册、注销和服务发现等方法。
- Consumer 和 Provider 分别表示服务消费者和服务提供者。服务消费者通过 invoke 方法发起请求,服务提供者通过 export 方法提供服务。
- MessageQueue 表示消息队列,用于服务消费者和服务提供者之间的通信。
- LoadBalancer 表示负载均衡,用于从多个服务提供者中选择一个进行请求。
- Failover、Failfast、Failsafe 和 Failback 表示 Dubbo 支持的容错机制。
- RegistryListener 表示注册中心的监听器,可以监听服务的注册和注销事件。
2、Dubbo 服务治理的注册与发现机制
由于Dubbo服务治理的注册与发现机制主要是基于网络通信的,因此可以使用时序图来描述其过程。
上图中,ServiceConsumer表示服务消费者,RegistryCenter表示注册中心,ServiceProvider表示服务提供者。
在服务治理的注册与发现机制中
- 服务消费者会向注册中心发送查询请求,查询服务提供者的信息。
- 注册中心会将服务提供者的信息存储在分布式注册表中,并将服务列表返回给服务消费者。
- 服务消费者可以根据注册表中的信息,找到服务提供者的位置和版本等信息,并发起请求。
- 同时,服务提供者也会将自己的服务信息注册到注册中心中,以便服务消费者可以发现并调用该服务。
3、Dubbo 服务治理的负载均衡算法
Dubbo 服务治理的负载均衡算法是指服务消费者可以将请求分配到多个服务提供者上,提高服务的性能和可用性。
Dubbo 服务治理支持轮询、加权轮询、最小连接数和加权最小连接数四种负载均衡算法。
- 轮询算法 是指服务消费者按照一定的时间间隔,将请求轮流分配给多个服务提供者。
- 加权轮询算法 是指服务消费者按照服务提供者的负载情况,将请求轮流分配给多个服务提供者。
- 最小连接数算法 是指服务消费者按照服务提供者的最小连接数,将请求分配给多个服务提供者。
- 加权最小连接数算法 是指服务消费者按照服务提供者的负载情况,以及服务提供者的最小连接数,将请求分配给多个服务提供者。
以上流程图简要描述了Dubbo服务治理中负载均衡算法的过程。服务消费者向负载均衡算法发送请求,负载均衡算法会选择一个合适的服务提供者来处理请求,并返回响应。
在Dubbo服务治理中,可用的负载均衡算法包括轮询、加权轮询、最小连接数和加权最小连接数。在这个流程中,我们没有具体说明每种负载均衡算法的实现细节,因为不同的算法可能具有不同的实现方式。
三、Dubbo 服务治理的实现方式
1、基于 Docker 容器的 Dubbo 服务治理
(1)安装 Docker
在本地计算机上安装 Docker 后,需要将其启用为系统服务。可以使用以下命令启动 Docker 服务:
sudo systemctl start docker
sudo systemctl enable docker
(2)创建 Docker Compose 文件
使用 Docker Compose 文件来定义 Dubbo 服务的配置。在命令行中打开 Docker Compose 文件编辑器:
vi /etc/docker/compose.yaml
然后,编辑 Compose 文件,定义 Dubbo 服务的主机、端口和配置文件等信息:
version: '3'
services: dubbo: image: dubbo:latest environment: DUBBO_VERSION: '2.7.6' JAVA_OPTS: '-Xmx512m -XX:+UseConcMarkSweepGC -Djava.util.concurrent.Executor=yes' ports: - "8080:8080" - "8081:8081" volumes: - ./ DubboConfig:/dubbo/config - ./logs:/dubbo/logs
在上面的 Compose 文件中,Dubbo 服务使用最新的版本,并且将使用 Executor 来优化性能。该服务有两个端口,一个用于客户端访问,另一个用于内部服务通信。它还提供了一个 volumes 选项,用于将本地目录映射到容器内。
(3)启动 Docker Compose
使用以下命令启动 Docker Compose:
docker-compose up
这将启动 Dubbo 服务,并将端口 8080 和 8081 暴露给客户端。
(4)查看 Dubbo 服务
可以使用以下命令查看 Dubbo 服务的状态:
docker-compose ps dubbo
这将列出 Dubbo 服务的所有进程。可以使用以下命令停止或重新启动服务:
docker-compose stop dubbo
docker-compose restart dubbo
(5)部署 Dubbo 服务到云环境
如果要将 Dubbo 服务部署到云环境中,需要使用云原生技术,比如 Kubernetes。可以使用以下命令将 Dubbo 服务部署到 Kubernetes 集群中:
kubectl apply -f https://docs.projectdouban.io/zh-cn/dubbo/kubernetes/dubbo-service.yaml
这将创建一个新的 Kubernetes Service,该 Service 将暴露 Dubbo 服务到客户端,同时也将配置 Dubbo 服务在 Kubernetes 集群中的端口映射。
(6)测试 Dubbo 服务
现在,可以在本地计算机上使用 Dubbo 客户端工具来测试 Dubbo 服务。可以使用以下命令启动 Dubbo 客户端:
java -jar DubboClient.jar --url=http://localhost:8080/dubbo --user=admin --password=123456
这将启动一个 Dubbo 客户端,该客户端将使用 HTTP 协议访问 Dubbo 服务,并使用管理员权限进行验证。
使用以下命令可以查看 Dubbo 客户端的日志:
java -jar DubboClient.jar --url=http://localhost:8080/dubbo --user=admin --password=123456 | more
这将列出 Dubbo 客户端的日志,可以查看客户端与 Dubbo 服务之间的通信情况。
2、基于 Kubernetes 容器编排的 Dubbo 服务治理
(1)安装 Kubernetes
首先需要安装 Kubernetes。可以在本地计算机上使用以下命令安装 Kubernetes:
sudo apt-get update
sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubernetes
(2)创建 Kubernetes Deployment
使用 Deployment 来定义 Dubbo 服务的配置。在 Kubernetes Deployment 中,可以指定 Dubbo 服务的名称、版本、端口、环境变量等信息。可以使用以下命令创建 Kubernetes Deployment:
kubectl create deployment dubbo --image=dubbo:latest --port=8080 --env-file=.env
这将创建一个 Kubernetes Deployment,该 Deployment 将定义 Dubbo 服务的主机、端口和配置文件等信息。其中,–image 参数指定了 Dubbo 服务的镜像地址,–port 参数指定了 Dubbo 服务使用的端口,–env-file 参数指定了 Dubbo 服务的环境变量配置文件。
(3)创建 Kubernetes Service
使用 Service 来定义 Dubbo 服务的服务类型和端口。可以使用以下命令创建 Kubernetes Service:
kubectl create service dubbo --port=8080 --type=LoadBalancer
这将创建一个 Kubernetes Service,该 Service 将暴露 Dubbo 服务到客户端,同时也将在 Kubernetes 集群中暴露 Dubbo 服务的端口。
(4)创建 Kubernetes ConfigMap
使用 ConfigMap 来定义 Dubbo 服务的配置文件。可以使用以下命令创建 Kubernetes ConfigMap:
kubectl create configmap dubbo-config --from-file=./dubbo/config/dubbo.conf
这将创建一个 Kubernetes ConfigMap,该 ConfigMap 将使用 Dubbo 服务的配置文件。
(5)创建 Kubernetes Secret
使用 Secret 来定义 Dubbo 服务的认证密码。可以使用以下命令创建 Kubernetes Secret:
kubectl create secret generic dubbo-password --from-literal=password=<your-password>
这将创建一个 Kubernetes Secret,该 Secret 将存储 Dubbo 服务的认证密码。
(6)创建 Kubernetes Ingress
使用 Ingress 来定义 Dubbo 服务的客户端访问路径。可以使用以下命令创建 Kubernetes Ingress:
kubectl create ingress dubbo --from-literal=tls-secret=dubbo-password
这将创建一个 Kubernetes Ingress,该 Ingress 将配置 Dubbo 服务的客户端访问路径,同时也将使用之前创建的 Secret 来存储认证密码。
(7)测试 Dubbo 服务
现在可以使用 Kubernetes Deployment、Service、ConfigMap 和 Secret 来测试 Dubbo 服务。可以使用以下命令启动 Dubbo 客户端:
kubectl apply -f https://docs.projectdouban.io/zh-cn/dubbo/kubernetes/dubbo-ingress.yaml
这将创建一个新的 Kubernetes Ingress,该 Ingress 将配置 Dubbo 服务的客户端访问路径,同时也将使用之前创建的 Secret 来存储认证密码。现在可以使用本地 Dubbo 客户端工具来测试 Dubbo 服务了。
3、基于云原生架构的 Dubbo 服务治理
(1)安装云原生基础设施
首先需要安装云原生基础设施,比如容器编排平台 (Kubernetes)、服务注册与发现平台 (Zookeeper)、负载均衡器 (ELB) 等。可以在本地计算机上使用以下命令安装这些平台:
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
(2)创建 Kubernetes Deployment
使用 Deployment 来定义 Dubbo 服务的配置。在 Kubernetes Deployment 中,可以指定 Dubbo 服务的名称、版本、端口、环境变量等信息。可以使用以下命令创建 Kubernetes Deployment:
kubectl create deployment dubbo --image=dubbo:latest --port=8080 --env-file=.env
这将创建一个 Kubernetes Deployment,该 Deployment 将定义 Dubbo 服务的主机、端口和配置文件等信息。其中,–image 参数指定了 Dubbo 服务的镜像地址,–port 参数指定了 Dubbo 服务使用的端口,–env-file 参数指定了 Dubbo 服务的环境变量配置文件。
(3)创建 Kubernetes Service
使用 Service 来定义 Dubbo 服务的服务类型和端口。可以使用以下命令创建 Kubernetes Service:
kubectl create service dubbo --port=8080 --type=LoadBalancer
这将创建一个 Kubernetes Service,该 Service 将暴露 Dubbo 服务到客户端,同时也将在 Kubernetes 集群中暴露 Dubbo 服务的端口。
(4)创建 Kubernetes ConfigMap
使用 ConfigMap 来定义 Dubbo 服务的配置文件。可以使用以下命令创建 Kubernetes ConfigMap:
kubectl create configmap dubbo-config --from-file=./dubbo/config/dubbo.conf
这将创建一个 Kubernetes ConfigMap,该 ConfigMap 将使用 Dubbo 服务的配置文件。
(5)创建 Kubernetes Secret
使用 Secret 来定义 Dubbo 服务的认证密码。可以使用以下命令创建 Kubernetes Secret:
kubectl create secret generic dubbo-password --from-literal=password=<your-password>
这将创建一个 Kubernetes Secret,该 Secret 将存储 Dubbo 服务的认证密码。
(6)创建 Kubernetes Ingress
使用 Ingress 来定义 Dubbo 服务的客户端访问路径。可以使用以下命令创建 Kubernetes Ingress:
kubectl create ingress dubbo --from-literal=tls-secret=dubbo-password
这将创建一个 Kubernetes Ingress,该 Ingress 将配置 Dubbo 服务的客户端访问路径,同时也将使用之前创建的 Secret 来存储认证密码。
(7)测试 Dubbo 服务
现在可以使用 Kubernetes Deployment、Service、ConfigMap 和 Secret 来测试 Dubbo 服务。可以使用以下命令启动 Dubbo 客户端:
kubectl apply -f https://docs.projectdouban.io/zh-cn/dubbo/kubernetes/dubbo-ingress.yaml
这将创建一个新的 Kubernetes Ingress,该 Ingress 将配置 Dubbo 服务的客户端访问路径,同时也将使用之前创建的 Secret 来存储认证密码。现在可以使用本地 Dubbo 客户端工具来测试 Dubbo 服务了。
四、Dubbo 服务治理的应用场景
1、微服务架构中的 Dubbo 服务治理
在微服务架构中,服务之间的通信需要通过中间件来实现,而 Dubbo 是常用的一种中间件。Dubbo 可以提供双向通信、负载均衡、服务注册与发现等功能,使得服务之间的通信更加高效和安全。在微服务架构中,Dubbo 服务治理的应用场景包括:
- 服务注册与发现:微服务架构中,服务的数量和维护量往往非常大,因此需要使用 Dubbo 这样的中间件来对服务进行治理和管理。Dubbo 可以提供服务注册与发现、负载均衡、服务消费等功能,可以帮助微服务架构更好地管理和监控服务。
- 服务调用:微服务架构中,服务之间的通信需要通过 Dubbo 来实现。Dubbo 可以提供双向通信、负载均衡等功能,使得服务之间的通信更加高效和安全。
2、分布式系统中的 Dubbo 服务治理
在分布式系统中,服务之间的通信需要通过总线或者中间件来实现,而 Dubbo 也是常用的一种中间件。Dubbo 可以提供双向通信、负载均衡、服务注册与发现等功能,使得服务之间的通信更加高效和安全。在分布式系统中,Dubbo 服务治理的应用场景包括:
- 服务注册与发现:分布式系统中,服务的数量和维护量往往非常大,因此需要使用 Dubbo 这样的中间件来对服务进行治理和管理。Dubbo 可以提供服务注册与发现、负载均衡、服务消费等功能,可以帮助分布式系统更好地管理和监控服务。
- 服务调用:分布式系统中,服务之间的通信需要通过 Dubbo 来实现。Dubbo 可以提供双向通信、负载均衡等功能,使得服务之间的通信更加高效和安全。
五、Dubbo 服务治理的优化措施
1、提高 Dubbo 服务治理的可用性和高并发处理能力
为了提高 Dubbo 服务治理的可用性和高并发处理能力,可以采取以下措施:
- 使用集群部署:将 Dubbo 注册中心和服务提供者部署在多个节点上,提高服务的可用性和容错能力。
该时序图表示了一个使用 Dubbo 集群部署的微服务架构中,客户端通过 Dubbo 注册中心来发现并调用服务提供者的过程。由于 Dubbo 注册中心和服务提供者都进行了集群部署,因此客户端可以从多个注册中心和多个服务提供者中发现和调用服务,提高了系统的可用性和容错能力。
- 优化资源配置:针对 Dubbo 服务的并发量和负载情况,适当调整机器的 CPU、内存、磁盘等资源,提高系统的处理能力。
该流程图表示了对 Dubbo 服务进行资源配置优化的过程。首先需要通过监控服务的负载情况,收集并分析服务的负载数据,然后根据分析结果对服务提供者的资源进行优化配置,最后重新部署服务提供者,使得服务提供者能够更好地处理并发请求,提高系统的处理能力。
- 合理设置 Dubbo 的线程池大小:根据业务需求和硬件资源情况,合理设置 Dubbo 的线程池大小,避免线程池过大或过小导致的性能问题。
该时序图表示了 Dubbo 服务提供者使用线程池来处理客户端请求的过程。通过合理设置线程池的大小,可以避免线程池过大或过小导致的性能问题。当客户端发起请求时,Dubbo 服务提供者使用线程池来处理请求,当请求处理完成后返回响应给客户端。
- 使用缓存和消息队列:通过缓存和消息队列来缓解 Dubbo 服务的并发压力,提高系统的可用性和性能。
2、优化 Dubbo 服务治理的性能和带宽消耗
为了优化 Dubbo 服务治理的性能和带宽消耗,可以采取以下措施:
- 选择合适的序列化框架:Dubbo 支持多种序列化框架,包括 Hessian、Java 自带的序列化、JSON 等,选择合适的序列化框架可以提高性能和降低带宽消耗。
- 合理设置超时时间:设置合理的超时时间可以避免 Dubbo 服务调用出现阻塞和超时等问题,提高系统的性能和稳定性。
- 使用缓存:通过缓存来避免 Dubbo 服务频繁调用,提高系统的性能和带宽利用率。
- 优化网络带宽:通过优化网络带宽的使用方式,例如启用 TCP 协议的 Nagle 算法、使用压缩算法等,可以降低 Dubbo 服务的带宽消耗。
3、增强 Dubbo 服务治理的安全性和可靠性
为了增强 Dubbo 服务治理的安全性和可靠性,可以采取以下措施:
- 启用 SSL 加密:通过启用 SSL 加密来保障 Dubbo 服务的安全性。
- 启用认证机制:通过启用认证机制来保障 Dubbo 服务的安全性,例如使用基于 Token 的认证机制等。
- 设置合理的重试机制:设置合理的重试机制可以避免 Dubbo 服务因为网络波动等原因出现调用失败的情况,提高系统的可靠性。
- 监控和日志记录:通过监控和日志记录可以及时发现系统中的问题,进行及时的处理,提高系统的可靠性和安全性。
- 使用健康检查:通过使用健康检查可以及时发现服务故障或者节点异常,避免服务因为故障而无法提供服务,提高系统的可靠性。 定期备份和恢复:定期备份和恢复可以避免服务因为数据丢失或者损坏而无法正常提供服务,提高系统的可靠性和安全性。
Dubbo系列文章
Dubbo高手之路1,Dubbo原理和机制,Dubbo的核心组件
Dubbo高手之路2,6种扩展机制详解
Dubbo高手之路3,Dubbo服务消费详解
Dubbo高手之路4,Dubbo服务提供者详解
🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师。
相关文章:
图解Dubbo,Dubbo 服务治理详解
目录 一、介绍1、介绍 Dubbo 服务治理的基本概念和重要性2、阐述 Dubbo 服务治理的实现方式和应用场景 二、Dubbo 服务治理的原理1、Dubbo 服务治理的架构设计2、Dubbo 服务治理的注册与发现机制3、Dubbo 服务治理的负载均衡算法 三、Dubbo 服务治理的实现方式1、基于 Docker 容…...
Css 如何取消a链接点击时的背景颜色
要取消 <a> 链接点击时的背景颜色,可以使用 CSS 的伪类 :active。你可以通过为 a:active 应用 background-color 属性设置为 transparent 或者 none,来取消点击时的背景色。下面是一个示例: a:active {background-color: transparent;…...
1.16.C++项目:仿muduo库实现并发服务器之HttpContext以及HttpServer模块的设计
文章目录 一、HttpContext模块二、HttpServer模块三、HttpContext模块实现思想(一)功能(二)意义(三)接口 四、HttpServer模块实现思想(一)功能(二)意义&#…...
ABAP 新增PO计划行时 新增行交货日期默认当前最大交期
ABAP 新增PO计划行时 新增行交货日期默认当前最大交期 DATA: ls_poitem TYPE mepoitem. DATA: ls_jhh TYPE meposchedule. DATA: ls_poitemc TYPE REF TO if_purchase_order_item_mm. DATA: is_persistent TYPE mmpur_bool. DATA: lt_eket TYPE TABLE OF eket. DATA: ls_e…...
VSCode怎么创建Java项目
首先安装好Java的开发环境:JDK在VSCode中安装适用于Java开发的插件。打开VSCode,点击左侧的扩展图标,搜索并安装Java Extension Pack插件。等待安装完成后,重启VSCode生效。创建一个新的Java项目,按下Ctrl Shift P&a…...
软件工程与计算(十四)详细设计中面向对象方法下的模块化
一.面向对象中的模块 1.类 模块化是消除软件复杂度的一个重要方法,每个代码片段相互独立,这样能够提高可维护性。在面向对象方法中,代码片段最重要的类,整个类的所有代码联合起来构成独立的代码片段。 模块化希望代码片段由两部…...
商城免费搭建之java商城 开源java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c
1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…...
python教程:selenium WebDriver 中的几种等待
嗨喽,大家好呀~这里是爱看美女的茜茜呐 强制等待:sleep() import time sleep(5) #等待5秒设置固定休眠时间,单位为秒。 由python的time包提供, 导入 time 包后就可以使用。 缺点: 不智能,使用太多的sleep会影响脚本运行速度。…...
【MATLAB源码-第49期】基于蚁群算法(ACO)算法的栅格路径规划,输出最佳路径图和算法收敛曲线图。
操作环境: MATLAB 2022a 1、算法描述 蚁群算法是一种模拟自然界蚂蚁觅食行为的启发式优化算法。在蚁群系统中,通过模拟蚂蚁之间通过信息素沟通的方式来寻找最短路径。 在栅格路径规划中,蚁群算法的基本步骤如下: 1. 初始化: …...
LabVIEW生产者消费者架构
LabVIEW生产者消费者架构 生产者/消费者模式可以轻松地同时处理多个进程,同时还能以不同速率迭代。 缓冲通信 当多个进程以不同速度运行时,就适合采用进程间缓冲通信。有了足够大的缓冲区后,生产者循环可以以快于消费者循环的速度运行&…...
成都瀚网科技:如何有效运营抖店来客呢?
随着电子商务的快速发展和移动互联网的普及,越来越多的企业开始将目光转向线上销售渠道。其中,抖音成为备受关注的平台。作为中国最大的短视频社交平台之一,抖音每天吸引数亿用户,这也为企业提供了巨大的商机。那么,如…...
iMazing2.17.3免费苹果手机备份还原助手
强大的 iOS 设备管理软件不管是 iPhone、iPad 或 iPod Touch 设备,只要将 iOS 设备连接到计算机,就可以处理不同类型的数据。iMazing 功能强大、易于使用,可以帮助您安全备份任何 iPhone、iPad 或 iPod Touch,备受用户信赖。 现在…...
sql查询到了数据但是实体类个别字段为null(映射失败)
参考博客: sql查询到了数据但是实体类个别字段为null(映射失败)_sql语句查到值,加字段!null没值-CSDN博客 问题描述: 1.SQL查询到了数据,在idea调试output控制台窗口打印出SQL语句,字段有值; 2.接收实体对象字段无…...
配置VScode开发环境-CUDA编程
如果觉得本篇文章对您的学习起到帮助作用,请 点赞 关注 评论 ,留下您的足迹💪💪💪 本文主要介绍VScode下的CUDA编程配置,因此记录以备日后查看,同时,如果能够帮助到更多人…...
openGauss学习笔记-101 openGauss 数据库管理-管理数据库安全-客户端接入之用SSH隧道进行安全的TCP/IP连接
文章目录 openGauss学习笔记-101 openGauss 数据库管理-管理数据库安全-客户端接入之用SSH隧道进行安全的TCP/IP连接101.1 背景信息101.2 前提条件101.3 操作步骤 openGauss学习笔记-101 openGauss 数据库管理-管理数据库安全-客户端接入之用SSH隧道进行安全的TCP/IP连接 101.…...
STM32如何使用中断?
一:EXTI 简介 STM32F10x 外部中断/事件控制器(EXTI)包含多达 20 个用于产生事件/中断请求的边沿检测器。 EXTI 的每根输入线都可单独进行配置,以选择类型(中断或事件)和相应的触发事件(上升 沿触…...
用于物体识别和跟踪的下游任务自监督学习-2-(计算机视觉中的距离度量+损失函数)
2.4 计算机视觉中的距离度量 在深度学习和计算机视觉中,距离度量通常用于比较图像、视频或其他数据的特征或嵌入。根据具体任务和数据属性,可以使用不同类型的距离度量。下面介绍了深度学习和计算机视觉中使用的一些常见类型的距离度量。 余弦相似性距…...
热成像仪的工作原理及在工业设备状态监测中的应用
前面我们介绍过>>热分析技术在工业设备状态监测中的应用,下面我们将深入探讨热成像仪的工作原理及在工业设备状态监测中的应用。 近年来,热成像仪作为一种先进的检测工具,在工业设备状态监测领域得到了广泛的应用。热成像仪能够通过探测…...
什么是库存管理?无需Excel,2023年这几款大热库存管理软件你get了吗?
什么是库存管理?库存管理是什么意思?都有哪些好用的库存管理系统?相信这些都是大家非常关注的话题,这篇就跟大家详细唠唠什么是库存管理,都用什么系统可以进行库存管理,并且为大家盘点2023年这几款大热库存…...
c# xml 参数配置表的使用
使用简介 实际使用界面 配置表管理界面 进入 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;…...
ubuntu20.04 nerf Instant-ngp
Instant-ngp linux ubuntu 20.04 GPU RTX3050Ti Instant-ngp官方文档地址 https://github.com/NVlabs/instant-ngp 参考链接Instant-ngp linux部署及使用 - 简书 Ubuntu20.04复现instant-ngp,自建数据集,导出mesh_XINYU W的博客-CSDN博客 步骤 安装基…...
隐写术--python隐写
0x00 背景 何为隐写术? 隐写术是一类可以隐藏自己写的一些东西的方法,是一门关于信息隐藏的技巧与科学。指的是采取一些不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容的方法。 可参考 一文让你完全弄懂Stegosaurus - 知乎 本文要…...
MySQL的InnoDB存储引擎中的自适应哈希索引技术
一、自适应哈希索引的工作机制与优化策略 MySQL的InnoDB存储引擎使用了一种叫做自适应哈希索引(Adaptive Hash Indexes)的技术。在某些索引值被频繁访问的情况下,InnoDB会自动在内存中为这些值建立哈希索引,以加速查询操作。 何…...
交互设计主要做什么?新手入门必读
什么是交互设计?它涉及哪些内容?交互设计师是什么样的人群?他们到底是做什么的?他们身怀什么技能?他们工作的价值在哪里?交互设计行业的现状是怎样的?工作前景又是如何的? 如果你心…...
【深度学习实验】循环神经网络(三):门控制——自定义循环神经网络LSTM(长短期记忆网络)模型
目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. LSTM类 a.__init__(初始化) b. init_state(初始化隐藏状态) c. forward(前向传播) 2. RNNModel类 a.__init__&am…...
flutter 消息并发时处理,递归查询
收到新消息的时候执行receiveNewConversation方法 可以自己模拟一下两条数据插入,延时执行插入会话的操作 收到一条新的会话消息,先记录会话ID到列表,直到第一条处理完(插入数据库后清理这个会话ID),才处理…...
第五十八章 学习常用技能 - 查看查询缓存
文章目录 第五十八章 学习常用技能 - 查看查询缓存查看查询缓存建立索引使用调谐表工具 第五十八章 学习常用技能 - 查看查询缓存 查看查询缓存 对于 SQL(用作嵌入式 SQL 时除外),系统会生成可重用代码来访问数据,并将该代码放置…...
AI 辅助学 Java | 专栏 1 帮你学 Java
在利用 ChatGPT 辅助学 Java 之前,你得先知道,它到底能辅助你干什么?如何能帮你更好的学习 Java。 苍何:作为一个语言模型,你能给 Java 的初学者提供什么帮助?请罗列具体的点。 ChatGPT:当你是一个 Java 初学者时,我可以提供以下具体的帮助和指导: 基本语法和语言特…...
2023_Spark_实验十六:编写LoggerLevel方法及getLocalSparkSession方法
一、搭建Spark项目结构 在SparkProject模块的pom.xml文件中增加一下依赖,并等待依赖包下载完毕,如上图。 <!-- Spark及Scala的版本号 --><properties><scala.version>2.11</scala.version><spark.version>2.1.1</sp…...
彻底搞懂:防止表单重复提交,前端限制还是后端限制?
欢迎大家来到小米的技术分享专栏!今天我将为大家带来一个热门话题:如何有效地防止表单重复提交。在开发中,我们常常会遇到这样的问题:用户频繁点击提交按钮,导致数据重复提交,给系统和用户体验带来不必要的…...
深圳网站建设行业新闻/福州百度开户多少钱
首先需要安装Vray渲染器 1.在场景中打一个自由摄像机 2.渲染设置尺寸设置,宽高比为2:1 3.在Vray设置页面,设置相机类型为球面,视角设置为360度 渲染结果...
上海有哪几家做新房的网站/谷歌网页版登录入口
随着互联网的发展,越来越多的企业和个人想要制作自己的H5网站。你真的了解它吗?又该如何制作呢?下面就跟大家解答一下关于h5网页的相关问题。1.H5到底是什么?通俗地讲,H5是一个网页,就像一个很大的容器&…...
网页标准化对网站开发维护的好处/海南百度推广代理商
网上说的基本都是使用express或http-server作为服务器或其它什么东西自己把玩php也有些年头,就用php好了 服务环境 apache,php先配置好隐藏php后缀扩展名: 在httpd.conf中 FilesMatch 标签内增加:ForceType application/x-httpd-php 这样只针…...
外贸网站开发莆田/陕西网站建设制作
每天一习题,提升Python不是问题!!有更简洁的写法请评论告知我! https://www.cnblogs.com/poloyy/category/1676599.html 题目 打印99乘法表 解题思路 外层循环,获取被乘数内层循环,获取乘数 答案 for i in …...
wordpress子菜单/seo搜索引擎优化实战
使用场景: 在服务器cpu 被占用过多的情况下,查看win 的资源管理器查看,哪些服务占用资源过多。 操作方法: WIN R ,输入perfmon -res,即可。 Linux 资源管理器可以使用top。...
网站建设存在的问题及解决办法/北京seo外包 靠谱
前言:我的项目是SpringBootMaven,所以我直接在IDEA用Maven打包了我的项目,名称为demo.jar。我需要把这个jar包放到Linux服务器并启动,而且本机可以访问到该项目一,启动停止项目二,开启访问端口正文…...