3.环境搭建与初次使用
5.dubbo环境搭建
【windows】-安装zookeeper:
步骤 |
---|
1、下载zookeeper 网址 https://archive.apache.org/dist/zookeeper/zookeeper-3.4.13/ |
2、解压zookeeper 解压运行zkServer.cmd ,初次运行会报错,没有zoo.cfg配置文件 |
3、修改zoo.cfg配置文件 将conf下的zoo_sample.cfg复制一份改名为zoo.cfg即可。 注意几个重要位置: dataDir=./ 临时数据存储的目录(可写相对路径) clientPort=2181 zookeeper的端口号 修改完成后再次启动zookeeper |
4、使用zkCli.cmd测试 ls /:列出zookeeper根下保存的所有节点 create –e /atguigu 123:创建一个atguigu节点,值为123 get /atguigu:获取/atguigu节点的值 |
【windows】-安装dubbo-admin管理控制台:
dubbo本身并不是一个服务软件。它其实就是一个jar包能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。所以你不用在Linux上启动什么dubbo服务。
但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序,不过这个监控即使不装也不影响使用。
1、下载dubbo-admin
https://github.com/apache/incubator-dubbo-ops
2、进入目录,修改dubbo-admin配置
修改 src\main\resources\application.properties 指定zookeeper地址
3、打包dubbo-admin
mvn clean package -Dmaven.test.skip=true
4、运行dubbo-admin
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
注意:【有可能控制台看着启动了,但是网页打不开,需要在控制台按下ctrl+c即可】
默认使用root/root 登陆
【linux】-安装zookeeper:
1、安装jdk
1、下载jdk
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
不要使用wget命令获取jdk链接,这是默认不同意,导致下载来的jdk压缩内容错误
2、上传到服务器并解压
3、设置环境变量
/usr/local/java/jdk1.8.0_171
文件末尾加入下面配置
export JAVA_HOME=/usr/local/java/jdk1.8.0_171
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.😒{JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
4、使环境变量生效&测试JDK
2、安装zookeeper
博客园安装教程:https://www.cnblogs.com/rekacai/p/11757719.html
1、下载zookeeper
网址 https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz
2、解压
3、移动到指定位置并改名为zookeeper
3、开机启动zookeeper
制作开机启动脚本
vi /etc/init.d/zookeeper
1)复制如下脚本
#!/bin/bash #chkconfig:2345 20 90 #description:zookeeper #processname:zookeeper ZK_PATH=/opt/zookeeper export JAVA_HOME=/opt/jdk1.8.0_152 case $1 in start) sh $ZK_PATH/bin/zkServer.sh start;; stop) sh $ZK_PATH/bin/zkServer.sh stop;; status) sh $ZK_PATH/bin/zkServer.sh status;; restart) sh $ZK_PATH/bin/zkServer.sh restart;; *) echo "require start|stop|status|restart" ;; esac
2)-把脚本注册为Service
3)增加权限
4、配置zookeeper
1、初始化zookeeper配置文件
拷贝/usr/local/zookeeper/conf/zoo_sample.cfg
到同一个目录下改个名字叫zoo.cfg
2、启动zookeeper
【linux】-安装dubbo-admin管理控制台
1、安装Tomcat8(旧版dubbo-admin是war,新版是jar不需要安装Tomcat)
1、下载Tomcat8并解压
https://tomcat.apache.org/download-80.cgi
wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz
2、解压移动到指定位置
3、开机启动tomcat8
复制如下脚本
#!/bin/bash #chkconfig:2345 21 90 #description:apache-tomcat-8 #processname:apache-tomcat-8 CATALANA_HOME=/opt/apache-tomcat-8.5.40 export JAVA_HOME=/opt/java/jdk1.8.0_211 case $1 in start) echo "Starting Tomcat..." $CATALANA_HOME/bin/startup.sh ;; stop) echo "Stopping Tomcat..." $CATALANA_HOME/bin/shutdown.sh ;; restart) echo "Stopping Tomcat..." $CATALANA_HOME/bin/shutdown.sh sleep 2 echo echo "Starting Tomcat..." $CATALANA_HOME/bin/startup.sh ;; *) echo "Usage: tomcat {start|stop|restart}" ;; esac
4、注册服务&添加权限
5、启动服务&访问tomcat测试
2、安装dubbo-admin
dubbo本身并不是一个服务软件。它其实就是一个jar包能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。所以你不用在Linux上启动什么dubbo服务。
但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序,不过这个监控即使不装也不影响使用。
1、下载dubbo-admin
https://github.com/apache/incubator-dubbo-ops
2、进入目录,修改dubbo-admin配置
修改 src\main\resources\application.properties 指定zookeeper地址
3、打包dubbo-admin
在dubbo-admin目录下cmd,输入命令:mvn clean package -Dmaven.test.skip=true
4、运行dubbo-admin
zookeeper一定要先启动起来再启动监控中心。
命令:java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
访问7001端口。
默认使用root/root 登陆
6.dubbo-helloworld
1.提出需求
某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址;
我们现在 需要创建两个服务模块进行测试
模块 | 功能 |
---|---|
订单服务web模块 | 创建订单等 |
用户服务service模块 | 查询用户地址等 |
测试预期结果:
订单服务web模块在A服务器,用户服务模块在B服务器,A可以远程调用B的功能。
2.工程架构
根据 dubbo《服务化最佳实践》
1、分包
建议将服务接口,服务模型,服务异常等均放在 API 包中,因为服务模型及异常也是 API 的一部分,同时,这样做也符合分包原则:重用发布等价原则(REP),共同重用原则(CRP)。 如果需要,也可以考虑在 API 包中放置一份 spring 的引用配置,这样使用方,只需在 spring 加载过程中引用此配置即可,配置建议放在模块的包目录下,以免冲突,如:com/alibaba/china/xxx/dubbo-reference.xml。
2、粒度
服务接口尽可能大粒度,每个服务方法应代表一个功能,而不是某功能的一个步骤,否则将面临分布式事务问题,Dubbo 暂未提供分布式事务支持。 服务接口建议以业务场景为单位划分,并对相近业务做抽象,防止接口数量爆炸。 不建议使用过于抽象的通用接口,如:Map query(Map),这样的接口没有明确语义,会给后期维护带来不便。
3.创建模块
1、gmall-interface:公共接口层(model,service,exception…)
作用:定义公共接口,也可以导入公共依赖 1、Bean模型 public class UserAddress implements Serializable{ private Integer id; private String userAddress; private String userId; private String consignee; private String phoneNum; private String isDefault; } 2、Service接口 public interface UserService { public List<UserAddress> getUserAddressList(String userId); }
2、gmall-user:用户模块(对用户接口的实现)
1、pom.xml
导入gmall-interface依赖
<dependencies> <dependency> <groupId>com.atguigu.dubbo</groupId> <artifactId>gmall-interface</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies>
2、Service
public class UserServiceImpl implements UserService { @Override public List<UserAddress> getUserAddressList(String userId) { // TODO Auto-generated method stub return userAddressDao.getUserAddressById(userId); } }
4、gmall-order-web:订单模块(调用用户模块)
1、pom.xml
<dependencies> <dependency> <groupId>com.atguigu.dubbo</groupId> <artifactId>gmall-interface</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies>
2、测试
public class OrderService { UserService userService; /** * 初始化订单,查询用户的所有地址并返回 * @param userId * @return */ public List<UserAddress> initOrder(String userId){ return userService.getUserAddressList(userId); } }
现在这样是无法进行调用的。我们gmall-order-web引入了gmall-interface,但是interface的实现是gmall-user,我们并没有引入,而且实际他可能还在别的服务器中。
4.使用dubbo改造
1、改造gmall-user作为服务提供者
1、引入dubbo
<!-- 引入dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.2</version> </dependency> <!--操作zookeeper的客户端--> <!-- 由于我们使用zookeeper作为注册中心,所以需要操作zookeeper dubbo 2.6以前的版本引入zkclient操作zookeeper dubbo 2.6及以后的版本引入curator操作zookeeper 下面两个zk客户端根据dubbo版本2选1即可 --> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> </dependency> <!-- curator-framework --> /kjʊəˈreɪ tə(r)/ 管理者 <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency>
2、配置提供者配置文件
# 指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名) <dubbo:application name="gmall-user"></dubbo:application> # 指定注册中心的地址 <dubbo:registry address="zookeeper://118.24.44.169:2181" /> <dubbo:registry protocol="zookeeper" address="118.24.44.169:2181" /> // 这样写也可以 # 指定通信规则(通信协议&通信端口)使用dubbo协议,将服务暴露在20880端口 <dubbo:protocol name="dubbo" port="20880" /> # 指定需要暴露的服务 ref:指定服务真正的实现对象 <dubbo:service interface="com.atguigu.gmall.service.UserService" ref="userServiceImpl" />
3、启动服务
public static void main(String[] args) throws IOException { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-beans.xml"); System.in.read(); }
2、改造gmall-order-web作为服务消费者
1、引入dubbo
<!-- 引入dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.2</version> </dependency> <!-- 由于我们使用zookeeper作为注册中心,所以需要引入zkclient和curator操作zookeeper --> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> </dependency> <!-- curator-framework --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency>
2、配置消费者信息
<!-- 应用名 --> <dubbo:application name="gmall-order-web"></dubbo:application> <!-- 指定注册中心地址 --> <dubbo:registry address="zookeeper://118.24.44.169:2181" /> <!-- 声明需要调用的远程服务的接口;生成远程服务代理,可以和本地bean一样使用demoService --> <dubbo:reference id="userService" interface="com.atguigu.gmall.service.UserService"></dubbo:reference>
3、测试调用
访问gmall-order-web的initOrder请求,会调用UserService获取用户地址;
调用成功。说明我们order已经可以调用远程的UserService了;
4、注解版
1、服务提供方
<dubbo:application name="gmall-user"></dubbo:application> <dubbo:registry address="zookeeper://118.24.44.169:2181" /> # 通信协议及端口 <dubbo:protocol name="dubbo" port="20880" /> # 使用包扫描方式,暴露服务 <dubbo:annotation package="com.atguigu.gmall.user.impl"/>
import com.alibaba.dubbo.config.annotation.Service; import com.atguigu.gmall.bean.UserAddress; import com.atguigu.gmall.service.UserService; import com.atguigu.gmall.user.mapper.UserAddressMapper; @Service //使用dubbo提供的service注解,注册暴露服务 public class UserServiceImpl implements UserService {}
2、服务消费方
<dubbo:application name="gmall-order-web"></dubbo:application> <dubbo:registry address="zookeeper://118.24.44.169:2181" /> <dubbo:annotation package="com.atguigu.gmall.order.controller"/>
@Controller public class OrderController { @Reference //使用dubbo提供的reference注解引用远程服务 UserService userService;
5、监控中心
1.dubbo-admin
图形化的服务管理页面;安装时需要指定注册中心地址,即可从注册中心中获取到所有的提供者/消费者进行配置管理
2.dubbo-monitor-simple
简单的监控中心;
1、安装
1、下载 dubbo-ops
https://github.com/apache/incubator-dubbo-ops
2、修改配置指定注册中心地址
进入 dubbo-monitor-simple\src\main\resources\conf
修改 dubbo.properties文件
3、打包dubbo-monitor-simple
mvn clean package -Dmaven.test.skip=true
4、解压 tar.gz 文件,并运行start.bat
如果缺少servlet-api,自行导入servlet-api再访问监控中心
5、启动访问8080
2、监控中心配置
所有服务配置连接监控中心,进行监控统计 ,服务提供者与消费者都需要配置监控中心
<!-- 监控中心协议,如果为protocol="registry",表示从注册中心发现监控中心地址,否则直连监控中心 --> 发现监控中心: <dubbo:monitor protocol="registry"></dubbo:monitor> 或者 直连监控中心: <dubbo:monitor address="127.0.0.1:7070"></dubbo:monitor>
Simple Monitor 挂掉不会影响到 Consumer 和 Provider 之间的调用,所以用于生产环境不会有风险。
Simple Monitor 采用磁盘存储统计信息,请注意安装机器的磁盘限制,如果要集群,建议用mount共享磁盘。
6、整合SpringBoot
1、引入spring-boot-starter以及dubbo和curator的依赖
<dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency>
注意starter版本适配:
2、配置application.properties 提供者配置:
# application.name就是服务名,不能跟别的dubbo提供端重复 dubbo.application.name=gmall-user # registry.protocol 是指定注册中心协议 dubbo.registry.protocol=zookeeper # registry.address 是注册中心的地址加端口号 dubbo.registry.address=192.168.67.159:2181 # protocol.name dubbo通信协议名称 dubbo.protocol.name=dubbo # protocol.port dubbo通信端口 dubbo.protocol.port=20880 # 监控中心 registry 注册中心自动发现; dubbo.monitor.address=‘地址’ 直连方式 dubbo.monitor.protocol=registry 消费者配置: dubbo.application.name=gmall-order-web # 注册中心协议与地址端口号(不分开写形式) dubbo.registry.address=zookeeper://192.168.67.159:2181 # 监控中心 registry 注册中心自动发现; dubbo.monitor.address=‘地址’ 直连方式 dubbo.monitor.protocol=registry # 注册中心自动发现 # 若使用@EnableDubbo注解就不用配置dubbo.scan.base-package,@EnableDubbo注解内部配置了扫描包 # base-package 注解方式要扫描的包 #dubbo.scan.base-package=com.atguigu.gmall
3、dubbo注解
@Service、@Reference
【如果没有在配置中写dubbo.scan.base-package,还需要使用@EnableDubbo注解】
启动类上配置注解@EnableDubbo开启dubbo使用
dubbo封装数据的bean要实现序列化
本文来自博客园,作者:Lz_蚂蚱,转载请注明原文链接:https://www.cnblogs.com/leizia/p/15291248.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步