第一章 第一个dubbo项目
为了安全:服务启动的ip全部使用10.10.10.10
版本:
- dubbo:2.5.5
重要的网址:
- dubbo的github:https://github.com/alibaba/dubbo
- dubbo官网:http://dubbo.io/
- dubbo使用者手册:https://dubbo.gitbooks.io/dubbo-user-book/
- dubbo管理者手册:https://dubbo.gitbooks.io/dubbo-admin-book/
- dubbo开发者手册:https://dubbo.gitbooks.io/dubbo-dev-book/
首先从https://github.com/alibaba/dubbo下载dubbo源码到本地,我们的第一个dubbo项目就是dubbo源码中的dubbo-demo子模块。
代码结构如下:
其中:
- dubbo-demo-api是提供服务接口的模块
- 在生产中,该模块会单独打成jar包,分别被provider和consumer依赖,provider实现该接口,consumer通过该接口引用provider实现的服务
- dubbo-demo-provider是服务提供者
- dubbo-demo-consumer是服务消费者
一 dubbo-demo-api
package com.alibaba.dubbo.demo; public interface DemoService {
String sayHello(String name);
}
只提供了一个接口。
二 dubbo-demo-provider
1 配置文件
src/main/resources/META-INF/spring/dubbo-demo-provider.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="demo-provider"/> <!-- 使用zookeeper注册中心,并使用curator客户端 -->
<dubbo:registry protocol="zookeeper" address="10.211.55.5:2181" client="curator"/> <!-- 使用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880"/> <!-- 和本地bean一样实现服务 -->
<bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl"/> <!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService"/>
</beans>
配置项:
- dubbo:application:指定应用名字,在生产中通常与artifactId相同
- dubbo:registry:指定注册中心
- protocol:使用的注册协议
- address:注册中心地址
- client:默认情况下,操作zookeeper的java客户端使用的是zkClient,这里使用curator
- dubbo:protocol:指定服务暴露的协议和端口
- dubbo:service:生命暴露的服务接口及其实现类
2 provider提供服务接口实现
package com.alibaba.dubbo.demo.provider; import com.alibaba.dubbo.demo.DemoService;
import com.alibaba.dubbo.rpc.RpcContext; import java.text.SimpleDateFormat;
import java.util.Date; public class DemoServiceImpl implements DemoService {
public String sayHello(String name) {
System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
return "Hello " + name + ", response form provider: " + RpcContext.getContext().getLocalAddress();
}
}
3 provider启动类
package com.alibaba.dubbo.demo.provider; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Provider {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-provider.xml"});
context.start(); System.in.read(); // 按任意键退出
}
}
三 dubbo-demo-consumer
1 配置文件
src/main/resources/META-INF/spring/dubbo-demo-consumer.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="demo-consumer"/> <!-- 使用zookeeper注册中心,并使用curator客户端 -->
<dubbo:registry protocol="zookeeper" address="10.211.55.5:2181" client="curator"/> <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService"/>
</beans>
配置项:
- dubbo:reference:指定引用的服务
- check:检查注册中心是否有可用的 provider
2 consumer启动类
package com.alibaba.dubbo.demo.consumer; import com.alibaba.dubbo.demo.DemoService;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Consumer {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-consumer.xml"});
context.start(); DemoService demoService = (DemoService) context.getBean("demoService"); // 获取远程服务代理
String hello = demoService.sayHello("world"); // 执行远程方法 System.out.println(hello); // 显示调用结果
}
}
启动服务并且调用远程服务。
四 启动服务
1 启动provider
启动成功后,会发现在zookeeper上创建了节点:
/dubbo
--/com.alibaba.dubbo.demo.DemoService
----/providers
------/dubbo://10.10.10.10:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider&dubbo=2.0.0&generic=false&interface=com.alibaba.dubbo.demo.DemoService&methods=sayHello&pid=1393&side=provider×tamp=1506831679007
注意:
- 所有dubbo相关的都会注册在“/dubbo”根节点下
- 与当前暴露的接口服务相关的,都注册在“/dubbo/接口”下
2 启动consumer
启动成功后,会发现在zookeeper上创建了节点:
/dubbo
--/com.alibaba.dubbo.demo.DemoService
----/consumers
------/consumer://10.10.10.10/com.alibaba.dubbo.demo.DemoService?application=demo-consumer&category=consumers&check=false&dubbo=2.0.0&interface=com.alibaba.dubbo.demo.DemoService&methods=sayHello&pid=1434&side=consumer×tamp=1506832498078
之后,看到provider和consumer双方的互动输出,则表示rpc成功!
第一个dubbo项目就结束了,dubbo-demo项目也可以查看http://dubbo.io/的例子。
第一章 第一个dubbo项目的更多相关文章
- 第一章 第一个spring boot程序(转载)
第一章 第一个spring boot程序 本编博客转发自:http://www.cnblogs.com/java-zhao/p/5324185.html 环境: jdk:1.8.0_73 mave ...
- C#语言————第一章 第一个C#程序
第一章 第一个C#程序 ******************C#程序*************** ①:建立项目:文件-->新建-->项目-->c#-->控制台程 ...
- 第一章 搭建一个通用的.net core项目框架
项目目标部署环境:CentOS 7+ 项目技术点:.netcore2.0 + Autofac +webAPI + NHibernate5.1 + mysql5.6 + nginx 开源地址:https ...
- 第一章 第一个spring boot程序
环境: jdk:1.8.0_73 maven:3.3.9 spring-boot:1.2.5.RELEASE(在pom.xml中指定了) 注意:关于spring-boot的支持, 最少使用jdk7(j ...
- Google C++测试框架系列入门篇:第二章 开始一个新项目
上一篇:Google C++测试框架系列入门篇:第一章 介绍:为什么使用GTest? 原始链接:Setting up a New Test Project 词汇表 版本号:v_0.1 开始一个新项目 ...
- 第二章——建立一个HelloWorld项目,练习使用git的add/commit/push/pull/fetch/clone等基本命令。比较项目的新旧版本的差别-----答题者:徐潇瑞
1.首先下载安装git,很简单所以就不详细说了,当弹出一个类似的命令窗口的东西,就说明Git安装成功 2.因为Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识 3.接着,注册githu ...
- C#第一章 第一个C#程序
第一个C#程序 namespace 是C#中组织代码的方式,它的作用那个类似java中的包 using 在Java中作用如果导入其他包 应该是用import关键字而在C#中应使用using关键字来引用 ...
- 2017.12.12 架构探险-第一章-从一个简单的web应用开始
参考来自:<架构探险>黄勇 著 1 使用IDEA搭建MAVEN项目 1.1 搭建java项目 (1)创建java项目 为了整个书籍的项目,我创建了一个工程,在这个工程里创建了每个章节的mo ...
- 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...
随机推荐
- Xamarin iOS教程之使用按钮接接收用户输入
Xamarin iOS教程之使用按钮接接收用户输入 Xamarin iOS使用按钮接接收用户输入 按钮是用户交互的最基础控件.即使是在iPhone或者iPad中,用户使用最多操作也是通过触摸实现点击. ...
- JavaScript学习方法
首先要说明的是,咱现在不是高手,最多还是一个半桶水,算是入了JS的门. 谈不上经验,都是一些教训. 这个时候有人要说,“靠,你丫半桶水,凭啥教我们”.您先别急着骂,先听我说. 你叫一个大学生去教小学数 ...
- 使用 IntraWeb (15) - 基本控件之 TIWEdit、TIWMemo、TIWText
TIWEdit //单行文本框, 通过 PasswordPrompt 属性可以作为密码框 TIWMemo //多行文本框 TIWText //相当于多行的 TIWLabel 或不能编辑的 TIWMem ...
- Mac 10.12使用free命令(fish)
前提:要使用free命令,可以安装fish shell,然后在里面安装free插件. 安装fish brew install fish 安装free fish fisher free 使用 fish ...
- 关于Android中传递数据的一些讨论
在Android中编写过程序的开发人员都知道.在Activity.Service等组件之间传递数据(尤其是复杂类型的数据)很不方便.一般可以使用Intent来传递可序列化或简单类型的数据.看下面的代码 ...
- 玩转ptrace(转)
下面是转帖的内容,写的很详细.但是不同的linux发行版中头文件的路径和名称并不相同.如在某些发行版中<linux/user.h>就不存在,其中定义的变量出现在<asm/ptrace ...
- vbs学习笔记1——判断文件和文件夹是否存在
首先分享一个“VBS脚本常用经典代码收集”,这里面关于vbs很丰富的内容. 所有vbs脚本都需要保存为.vbs形式才可以运行 FileSystemObject Object的所有方法参考:http:/ ...
- Golang 版本发布 与 TIOBE 排名
2016年国庆节(10月1日)开始接触 Go 语言,记录一下它的 版本发布 与 TIOBE 排名: Golang 排行榜 月份 版本 排名 备注 2012.03 1.0 201 ...
- 理解 process.initgroups(user, extra_group)
这个函数是对 linux C函数 initgroups() 的包装 node.js 官方文档非常含糊,还是看 linux C函数文档的解释!非常清楚明确. The initgroups() fun ...
- 如何获得ios7系统中的蓝色
最简洁的办法,直接使用下列代码: [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0] 最彻底的办法: OS7Colors是U ...