Dubbo
2019-08-26 05:57:16来源:博客园 阅读 ()
Dubbo
1、概念
Dubbo是一个基于java的RPC(Remote Procedure Call)框架。1.1、RPC
远程过程调用,即在A系统中,远程调用B系统的某个方法或者函数。1.1.1、PRC需要解决的问题
(1)、通讯问题 (2)、寻址问题 (3)、序列化与反序列化 调用过程中,数据的传输需要先序列化,得到数据进行反序列化。1.2、作用
在分布式环境下,透明化调用远程方法,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
2、入门示例
2.1、准备工作
安装dubbo注册中心。推荐使用zookeeper。 作用: (1)存储提供方提供的服务的调用地址。 (2)向调用方提供服务的地址。2.1.1、Zookeeper
2.1.1.1、概念
ZooKeeper是一个开源的、分布式协调服务。2.1.1.2、作用
解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布式服务2.1.1.3、特点
ZooKeeper本身可以以Standalone模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。2.1.2、单节点安装
(1)安装jdk (2)上传安装包到Linux服务器,解压 tar zxvf zookeeper-3.4.10.tar.gz (3)创建配置文件zoo.cfg zookeeper提供了zoo_sample.cfg这个基础配置文件,直接修改其名称为zoo.cfgcd /usr/local/zookeeper/zookeeper-3.4.10/conf cp zoo_sample.cfg zoo.cfg
(4)、启动 ./zkServer.sh start
2.1.3、集群版安装
2.1.3.1、需求
安装3个zookeeper节点。2.1.3.2、创建集群目录
mkdir -p /usr/local/zkCluster2.1.3.3、配置一个完整节点 (1)拷贝单节点zookeeper,到集群目录,重命名为zk1
cp /usr/local/zookeeper/zookeeper-3.4.10 /usr/local/zkCluster/zk1 -rf
(2)创建数据文件目录
mkdir -p /usr/local/zkCluster/zk1/data
(3)在数据文件目录下创建myid文件,并写入值”1”,表示标识该节点。
(4)修改zk1的zoo.cfg文件,指定数据文件目录和端口,及集群的配置信息。
(5)、复制zk1,一共三份,分别为zk1、zk2、zk3
cd /usr/local/zkCluster cp -rf zk1 zk2 cp -rf zk1 zk3
(6)、修改zk2、zk3的myid文件、zoo.cfg文件。 (7)、启动集群 依次启动zk1、zk2、zk3。
(8)、自定义shell脚本zkCluster.sh,管理集群启动、关闭、重启操作。
#!/bin/bash case "$1" in start) echo 'Starting zkCluster...' /usr/local/zkcluster/zk1/bin/zkServer.sh start /usr/local/zkcluster/zk2/bin/zkServer.sh start /usr/local/zkcluster/zk3/bin/zkServer.sh start ;; stop) echo 'Stopping zkCluster...' /usr/local/zkcluster/zk1/bin/zkServer.sh stop /usr/local/zkcluster/zk2/bin/zkServer.sh stop /usr/local/zkcluster/zk3/bin/zkServer.sh stop ;; status) /usr/local/zkcluster/zk1/bin/zkServer.sh status /usr/local/zkcluster/zk2/bin/zkServer.sh status /usr/local/zkcluster/zk3/bin/zkServer.sh status ;; restart|force-reload) echo 'Restarting zkCluster...' ${0} stop ${0} start ;; *) esac
(9)、重启集群
./zkCluster.sh restart
2.1、需求 通过dubbo调用服务,查询用户列表。
2.2、项目结构
dubbo-server:用于添加java接口-interface,定义服务。 dubbo-provider:用于添加java接口实现类,并且发布服务。 dubo-consumer:用于消费服务,即服务的调用。2.3、创建dubbo-server
2.3.1、项目结构
2.3.2、代码实现
(1)、User.java 实现序列化接口package cn.gzsxt.dubbo.pojo; import java.io.Serializable; public class User implements Serializable{ /** * */ private static final long serialVersionUID = 4498814071761004317L; private Integer id; private String name; private String pwd; public User() { super(); // TODO Auto-generated constructor stub } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } }
(2)UserService.java 定义接口服务
package cn.gzsxt.dubbo.pojo; import java.io.Serializable; public class User implements Serializable{ /** * */ private static final long serialVersionUID = 4498814071761004317L; private Integer id; private String name; private String pwd; public User() { super(); // TODO Auto-generated constructor stub } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } }
2.4、创建dubbo-provider
2.4.1、项目结构
2.4.2、添加pom.xml依赖
<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.0http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.gzsxt.dubbo</groupId> <artifactId>dubbo-provider</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <!-- 导入dubbo-server服务接口 --> <dependency> <groupId>cn.gzsxt.dubbo</groupId> <artifactId>dubbo-server</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- dubbo采用spring配置方式,所以需要导入spring容器依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.3.RELEASE</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.4</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions> <exclusion> <!-- 排除传递spring依赖 --> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.3.3</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8081</port> <path>/</path> </configuration> </plugin> </plugins> </build> </project>
2.4.3、创建服务实现类
UserServiceImpl.javapackage cn.gzsxt.dubbo.service.impl; import java.util.ArrayList; import java.util.List; import cn.gzsxt.dubbo.pojo.User; import cn.gzsxt.dubbo.service.UserService; /** * UserService服务的实现类 * @author lyq * */ public class UserServiceImpl implements UserService{ @Override public List<User> getAllUsers() { List<User> uList = new ArrayList<>(); User user = null; //模拟查询数据库 for(int i =0;i<5;i++){ user = new User(i,"zs"+i,"gzsxt"+i); uList.add(user); } return uList; } }
2.4.4、创建dubbo配置文件dubbo-provider.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="dubbo-provider" /> <!-- 这里使用的注册中心是zookeeper --> <dubbo:registry protocol="zookeeper" address="192.168.56.3:2181,192.168.56.3:2182,192.168.56.3:2183" /> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 将具体的实现类加入到Spring容器中 --> <bean id="userServiceImpl" class="cn.gzsxt.dubbo.service.impl.UserServiceImpl" /> <!-- 将服务接口暴露到dubbo中 --> <dubbo:service interface="cn.gzsxt.dubbo.service.UserService" ref="userServiceImpl" /> </beans>
2.4.5、配置Web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>dubbo-provider</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:dubbo/dubbo-*.xml</param-value> </context-param> <!--Spring的ApplicationContext 载入 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
2.4.6、启动dubbo-provider
2.5、创建dubbo-consumer
2.5.1、项目结构
2.5.2、添加pom.xml依赖
<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.0http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.gzsxt.dubbo</groupId> <artifactId>dubbo-consumer</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <!-- 导入dubbo-server服务接口 --> <dependency> <groupId>cn.gzsxt.dubbo</groupId> <artifactId>dubbo-server</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- dubbo采用spring配置方式,所以需要导入spring容器依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.3.RELEASE</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.4</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions> <exclusion> <!-- 排除传递spring依赖 --> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.3.3</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> </dependencies> </project>
2.5.3、创建dubbo配置文件dubbo-consumer.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="dubbo-consumer" /> <!-- 这里使用的注册中心是zookeeper --> <dubbo:registry protocol="zookeeper" address="192.168.56.3:2181,192.168.56.3:2182,192.168.56.3:2183" /> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 引用dubbo中的服务 --> <dubbo:reference interface="cn.gzsxt.dubbo.service.UserService" id="userService" /> </beans>
2.5.4、本地测试
package cn.gzsxt.dubbo.test; import java.util.List; import org.junit.Test; import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.gzsxt.dubbo.pojo.User; import cn.gzsxt.dubbo.service.UserService; public class TestConsumer { @Test public void testConsumer(){ //1.读取配置文件,加载容器 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:dubbo/dubbo-consumer.xml"); //2.获取bean对象 UserService userService = context.getBean("userService", UserService.class); //3.调用方法 List<User> users = userService.getAllUsers(); System.out.println(users); } }
3、dubbo原理
0.服务容器负责启动,加载,运行服务提供者。 1.服务提供者在启动时,向注册中心注册自己提供的服务。 2.服务消费者在启动时,向注册中心订阅自己所需的服务。 3.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。 4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。 5.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
4、安装监控中心
4.1、创建安装目录
mkdir -p /usr/local/dubbo |
4.2、上传、解压
tar zxvf dubbo-monitor-simple-2.5.3-assembly.tar.gz -C /usr/local/dubbo |
4.3、修改配置文件
cd /usr/local/dubbo/dubbo-monitor-simple-2.5.3/conf |
4.4、启动
cd /usr/local/dubbo/dubbo-monitor-simple-2.5.3/bin/ |
4.5、访问监控中心
http://192.168.56.3:9090/services.html
5、安装管理控制台
5.1、解压tomcat、清空tomcat/webapps/ROOT
tar zxvf apache-tomcat-7.0.68.tar.gz -C /usr/local/dubbo rm /usr/local/dubbo/apache-tomcat-7.0.68/webapps/ROOT/* -rf |
5.2、解压dubbo-admin.war至tomcat/webapps/ROOT目录
unzip dubbo-admin-2.5.4.war -d /usr/local/dubbo/ tomcat-7.0.68/webaaps/Root |
5.3、修改dubbo.properties
cd /usr/local/dubbo/apache-tomcat-7.0.68/webapps/ROOT/WEB-INF |
5.4、启动tomcat
cd /usr/local/dubbo/apache-tomcat-7.0.68/bin && ./startup.sh |
5.5、访问控制台
http:192.168.56.3:8080/governance/services
6、dubbo注解
6.1、dubbo-provider注解实现
6.1.1、添加注解对象
6.1.2、修改dubbo-provider.xml配置,开启注解
|
6.2、dubbo-consumer注解实现
6.2.1、新增spring-test依赖
<!-- 导入spring-test的依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.1.3.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> |
6.2.2、修改测试类
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations="classpath:dubbo/dubbo-consumer.xml") public class TestConsumer { @Reference private UserService userService; @Test public void testConsumer(){ List<User> users = userService.getAllUsers(); System.out.println(users); } } |
6.2.3、修改dubbo-consumer.xml,开启注解
原文链接:https://www.cnblogs.com/aknife/p/11372368.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Dubbo+Zookeeper集群案例 2020-06-09
- 最强Dubbo面试题,附带超级详细答案 2020-06-06
- JAVA自定义注解 2020-06-01
- DDD之2领域概念 2020-05-30
- Dubbo源码阅读-服务导出 2020-05-29
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash