【dubbo】小实例
来源:互联网 发布:音响 知乎 编辑:程序博客网 时间:2024/06/04 18:03
本教程所有安装包以及程序代码已上传至GitHub,下载路径:https://github.com/zhangzhenhua92/dubbo-framework.git
零、需求:
如图所示,有dubbo-a和dubbo-b系统,两个系统之间进行调用,dubbo-a调用dubbo-b中的方法,实现查询列表功能:
同时参照这张架构图来进行设计:
一、准备“注册中心”
1.安装zookeeper注册中心
解压安装包之后,修改zoo.cfg的配置文件路径(\zookeeper\zookeeper-3.4.8\conf):
2.启动zookeeper,双击bin\zkServer.cmd
二、"dubbo-b-api"系统
首先,“dubbo-a”和“dubbo-b”会使用相同的pojo实体,同时"dubbo-a"需要知道所要调用的"dubbo-b"的接口名称,即pojo和interface都需要被两个系统所公用,为了避免繁冗,就提取出了系统“dubbo-b-api”,目录结构如下:
如图所示,在该系统中定义了dubbo-a和dubbo-b所公用的pojo和接口,pom.xml文件无需修改。(代码参考github代码链接)
三、“dubbo-b”系统
三、“dubbo-b”系统
1.添加pom依赖
由于dubbo-b系统充当provider,此时对其pom文件进行扩充:
<dependencies><!-- 引用公用的pojo以及接口 --><dependency><groupId>cn.itcast.dubbo</groupId><artifactId>dubbo-b-api</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><!-- 引用sl4j做日志 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.6.4</version></dependency><!-- 引入dubbo的jar包 --><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><!-- 引入zookeeper充当注册中心 --><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.3.3</version></dependency><!-- 同上算作zookeeper充当注册中心 --><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency></dependencies><build><finalName>dubbo-b</finalName><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8181</port><path>/</path></configuration></plugin></plugins></build>如上可见,dubbo采用spring配置方式,并对dubbo,日志,zookeeper相关jar分别进行了依赖。
2.编写接口实现
如图所示,在cn.itcast.dubbo.service.impl目录下,编写UserServiceImpl.java的代码实现:
import java.util.ArrayList;import java.util.List;import cn.itcast.dubbo.pojo.User;import cn.itcast.dubbo.service.UserService;public class UserServiceImpl implements UserService { /** * 实现查询,模拟实现,不做具体的数据库查询。 */ public List<User> queryAll() { List<User> list = new ArrayList<User>(); for (int i = 0; i < 10; i++) { User user = new User(); user.setAge(10 + i); user.setId(Long.valueOf(i + 1)); user.setPassword("123456"); user.setUsername("username_" + i); list.add(user); } return list; }}
3.添加配置
3.1添加log4j.properties配置
log4j.rootLogger=DEBUG,A1log4j.logger.com.taotao = DEBUGlog4j.logger.org.mybatis = DEBUGlog4j.appender.A1=org.apache.log4j.ConsoleAppenderlog4j.appender.A1.layout=org.apache.log4j.PatternLayoutlog4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
3.2dubbo文件夹,并在其中添加“dubbo-server.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/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!-- 提供方应用信息,用于计算依赖关系 --><dubbo:application name="dubbo-b-server" /><!-- 这里使用的注册中心是zookeeper --><dubbo:registry address="zookeeper://127.0.0.1:2181"client="zkclient" /><!-- 用dubbo协议在20880端口暴露服务 --><dubbo:protocol name="dubbo" port="20880" /><!-- 将该接口暴露到dubbo中,多个接口 --><dubbo:service interface="cn.itcast.dubbo.service.UserService"ref="userServiceImpl" /><!-- 将具体的实现类加入到Spring容器中 --><bean id="userServiceImpl" class="cn.itcast.dubbo.service.impl.UserServiceImpl" /><!-- 在注册中心中自动查找监控服务 --><dubbo:monitor protocol="registry"/></beans>这个配置文件,是dubbo配置的核心,dubbo官网对它的讲解:http://dubbo.io/user-guide/reference-xmlconf/introduction.html,多去参考官方文档,这块就会很熟悉。
3.3添加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/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>dubbo-b</display-name><!-- 指定debbo的配置文件 --><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>如上所示,通过<context-param>指定dubbo的配置文件,以及Spring的ApplicationContext载入。
4.执行mvn package,将其war包部署到tomcat上
四、“dubbo-a”系统
新建maven项目,如github链接,目录结构如图:
1.配置文件
此时pom.xml文件和"dubbo-b"一致,log4j.properties文件和"dubbo-b"一致,在dubbo目录下,新建“dubbo-consumer.xml”,如下:
此时pom.xml文件和"dubbo-b"一致,log4j.properties文件和"dubbo-b"一致,在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/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="dubbo-a-consumer" /><!-- 这里使用的注册中心是zookeeper --><dubbo:registry address="zookeeper://127.0.0.1:2181"client="zkclient" /><!-- 从注册中心中查找服务 --><dubbo:reference id="userService"interface="cn.itcast.dubbo.service.UserService" /></beans>consumer这方仅仅三个声明,1.consumer方应用信息、2.注册中心声明、3.从注册中心要查找的服务
2.测试代码
编写UserServiceTest.java测试类
import java.util.List;import org.junit.Before;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.itcast.dubbo.pojo.User;public class UserServiceTest {private UserService userService; @Before public void setUp() throws Exception { // 完成UserService的初始化,通过dubbo拿到远程的impl实例 ApplicationContext applicationContext = new ClassPathXmlApplicationContext( "classpath:dubbo/dubbo-*.xml"); this.userService = applicationContext.getBean(UserService.class); } @Test public void testQueryAll() { for (int i = 0; i < 500; i++) { List<User> list = this.userService.queryAll(); for (User user : list) { System.out.println(user); } try { Thread.sleep(i * 10); } catch (InterruptedException e) { e.printStackTrace(); } } }}在@Before方法中,完成UserService初始化,拿到远程impl的实例,在@Test方法中调用其方法并打印user.
运行结果:
至此,通过dubbo实现远程RPC调用成功。
阅读全文
0 0
- 【dubbo】小实例
- Dubbo实例
- Dubbo实例
- Dubbo实例
- Dubbo实例
- dubbo实例
- Dubbo实例
- Dubbo实例
- dubbo实例
- Dubbo入门实例
- Dubbo学习教程实例
- 阿里dubbo实例测试
- dubbo 实例详解
- Dubbo简介及实例
- Dubbo入门实例
- Dubbo入门实例
- Dubbo入门实例
- dubbo入门实例
- 应用位异或交换两个变量的值
- spring bean 声明学习
- 【C
- I/O复用
- Image-to-Image Translation with Conditional Adversarial Networks
- 【dubbo】小实例
- POJ 1976-动态规划
- 蓝牙
- JavaWeb复习小知识点(一)
- linux安装scrapy出错'x86_64-Linux-gnu-gcc' failed with exit status 1
- Ice系列--Ice Registry(1)
- Balanced Lineup(线段树-树状数组)
- HAWQ + MADlib 玩转数据挖掘之(十)——图算法之单源最短路径
- Python 多进程