Dubbo基础学习

目录

  • 第一章、概念介绍
    • 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;}@Overridepublic 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.xsdhttp://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:serviceinterface="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.xsdhttp://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:referenceid="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:referenceid="remoteUserInfoService2"interface="com.bjpowernode.dubbo.service.UserInfoService"version="2.0.0"/>

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

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

相关文章

【eNSP】交换机(vlan和vlan间通信)

【eNSP】交换机&#xff08;vlan和vlan间通信&#xff09; 原理术语过程 实验根据图片连接模块配置设备名称和IP地址配置交换机交换机链路指定sw1配置sw2配置 设置网关交换机互联实验设置查看设置结果 ospf配置 原理 HUB集线器&#xff1a;它的作用可以简单的理解为将一些机器…

【算法系列篇】双指针

文章目录 前言什么是双指针算法1.移动零1.1 题目要求1.2 做题思路1.3 Java代码实现 2.复写零2.1 题目要求2.2 做题思路2.3 Java代码实现 3.快乐数3.1 题目要求3.2 做题思路3.3 Java代码实现 4.盛最多水的容器4.1 题目要求4.2 做题思路4.3 Java代码实现 5.有效三角形的个数5.1 题…

k8s 自身原理 4

前面咱们分享了 mater 和 worker 节点里面都有哪些组件&#xff0c;他们又是各自主要负责的工作是什么&#xff0c;现在我们心里应该都有数了吧 master 节点&#xff1a; etcd 存储资源配置&#xff0c;ApiServer 提供 RESTful Api 用于交互&#xff0c;scheduler 用于调度 p…

VS2019 + Qt : setToolTip的提示内容出现乱码

VS2019 Qt : setToolTip的提示内容出现乱码 在使用setToolTip()时&#xff0c; setToolTip(QString("asd你好&#xff01;");标签提示只有英文是对的&#xff0c;中文是乱码&#xff01; 应该是编码出了问题。默认情况下&#xff0c;Qt使用的是UTF-8编码&#xf…

踩坑经验:JavaScript 中的 for...of 和 for...in 循环

在 JavaScript 编程中&#xff0c;for...of 和 for...in 是常用的循环语法&#xff0c;但它们在使用时可能会引发一些意想不到的问题。本文将分享我在使用这两种循环时所遇到的坑和经验。 两者的区别&#xff1a; 适用对象类型&#xff1a; for…of&#xff1a;主要用于遍历可…

数据结构-带头双向循环链表的实现

前言 带头双向循环链表是一种重要的数据结构&#xff0c;它的结构是很完美的&#xff0c;它弥补了单链表的许多不足&#xff0c;让我们一起来了解一下它是如何实现的吧&#xff01; 1.节点的结构 它的节点中存储着数据和两个指针&#xff0c;一个指针_prev用来记录前一个节点…

Git详解及使用

Git简介 Git 是一种分布式版本控制系统&#xff0c;它可以不受网络连接的限制&#xff0c;加上其它众多优点&#xff0c;目前已经成为程序开发人员做项目版本管理时的首选&#xff0c;非开发人员也可以用 Git 来做自己的文档版本管理工具。 大概是大二的时候开始接触和使用Gi…

云计算——ACA学习 云计算核心技术

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 写在前面 本系列将会持续更新云计算阿里云ACA的学习&#xff0c;了解云计算及网络安全相关…

多维时序 | MATLAB实现PSO-CNN-BiLSTM多变量时间序列预测

多维时序 | MATLAB实现PSO-CNN-BiLSTM多变量时间序列预测 目录 多维时序 | MATLAB实现PSO-CNN-BiLSTM多变量时间序列预测基本介绍模型特点程序设计参考资料 基本介绍 本次运行测试环境MATLAB2021b&#xff0c;MATLAB实现PSO-CNN-BiLSTM多变量时间序列预测。代码说明&#xff1a…

POSTGRESQL 关于2023-08-14 数据库自动启动文章中使用KILL 来进行配置RELOAD的问题解释...

开头还是介绍一下群&#xff0c;如果感兴趣Polardb ,mongodb ,MySQL ,Postgresql ,redis &#xff0c;SQL SERVER ,ORACLE,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加 liuaustin3微信号 &…

Oracle执行计划

Oracle执行计划 1. 什么是执行计划Oracle explain使用3. Explain执行顺序 1. 什么是执行计划 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述。 执行计划描述了SQL引擎为执行SQL语句进行的操作&#xff1b;分析SQL语句相关的性能问题或仅仅质疑查询优化器的决定…

蔚来李斌卖手机:安卓系统,苹果售价,一年一发

‍作者 | Amy 编辑 | 德新 车圈大佬的玩法真让人寻不着套路&#xff01; 苹果的库克和小米的雷布斯&#xff0c;甚至是FF贾老板准备许久&#xff0c;都想分一块新能源车的蛋糕&#xff0c;蔚来李斌却反手进军手机界&#xff0c;从宣布造手机到手机入网仅仅隔了一年。 近期…

Beats:安装及配置 Metricbeat (一)- 8.x

在我之前的文章&#xff1a; Beats&#xff1a;Beats 入门教程 &#xff08;一&#xff09;Beats&#xff1a;Beats 入门教程 &#xff08;二&#xff09; 我详细描述了如何在 Elastic Stack 7.x 安装及配置 Beats。在那里的安装&#xff0c;它通常不带有安全及 Elasticsearc…

MapReduce介绍

目录 ​一、什么是MapReduce 二、MapReduce 的设计思想 2.1 分而治之 2.2 构建抽象模型&#xff1a;Map和Reduce 2.3 隐藏系统层细节 三、MapReduce 的框架原理 3.1 MRv1工作原理 3.1.1 MRv1架构工作原理图 3.1.1.1 流程说明 3.1.1.1.1 作业的提交 3.1.1.1.2 作业的初始化 3…

【AI大模型】训练Al大模型 (上篇)

大模型超越AI 前言 洁洁的个人主页 我就问你有没有发挥&#xff01; 知行合一&#xff0c;志存高远。 目前所指的大模型&#xff0c;是“大规模深度学习模型”的简称&#xff0c;指具有大量参数和复杂结构的机器学习模型&#xff0c;可以处理大规模的数据和复杂的问题&#x…

题目:售货员的难题(状压dp)

售货员的难题 题目描述输入输出格式输入格式&#xff1a;输出格式&#xff1a; 输入输出样例输入样例#1&#xff1a;输出样例#1&#xff1a; 思路AC代码&#xff1a; 题目描述 某乡有n个村庄( 1 < n < 16 )&#xff0c;有一个售货员&#xff0c;他要到各个村庄去售货&am…

Leetcode33 搜索旋转排序数组

题解&#xff1a; /*** 旋转排序数组可分为N1 N2两个部分&#xff0c;如&#xff1a;[4,5,6,7,1,2,3]&#xff0c;N1为[4,5,6,7]&#xff0c;N2为[1,2,3]** 必然满足以下两个条件&#xff1a;* 1. N1和N2都是分别递增的&#xff1b;* 2. N1中的所有元素大于N2中的所有元素;** …

Selenium浏览器自动化测试框架简单介绍

selenium简介 介绍   Selenium [1] 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Googl…

用cpolar生成的公网地址,对位于本地的Cloudreve网盘进行访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…

ArcGIS Pro如何制作不规则形状图例

在默认的情况下&#xff0c;ArcGIS Pro生成的图例是标准的点、直线和矩形的&#xff0c;对于湖泊等要素而言&#xff0c;这样的表示方式不够直观&#xff0c;我们可以将其优化一下&#xff0c;制作不规则的线和面来代替原有图例&#xff0c;这里为大家介绍一下制作方法&#xf…