dubbo入门--- HelloWorld
dubbo 核心概念?
dubbo 是一款管理分布式服务的 RPC 框架

调用关系说明:
0.服务容器负责启动,加载,运行服务提供者。
1.服务提供者在启动时,向注册中心注册自己提供的服务。
2.服务消费者在启动时,向注册中心订阅自己所需的服务。
3.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
具体详细内容请参加dubbo官方文档(http://dubbo.apache.org/en-us/)
入门 demo
一 、搭建父工程
第一步,先搭建父工程,搭建项目主要模块

主要模块:
-
- dubbo: 父项目, idea 新建项目后 删除 src 文件, 主要用于管理子模块
- api: 公共 api 模块, dubbo 右键 new module 创建的
- consumer: 服务消费者
- provider: 服务提供者
二、启动 zookeeper
因为 dubbo 只是个分布式服务管理框架, 服务注册功能还是需要 zookeeper 来实现,所以需要先启动 zookeeper(下载安装配置过程不赘述,后面专门的文章)
cmd 直接 zkServer 启动即可。
三、完善 api 子模块
在 api 子模块 src 下面新建类 ServiceDemo ,定义测试接口 SayHello

四、完善 provider 子模块
在 provider 子模块的 pom.xml 文件的 dependencies 标签里面添加以下依赖:
<dependency>
<!--这里需要改成自己的包名--> <groupId>red.wizard.api</groupId> <artifactId>api</artifactId> <version>1.0.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.0.5.RELEASE</version> </dependency>
依赖导入之后, 实现 api 接口.

在 resource 文件下面新建 provider.xml 文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--定义了提供方应用信息,用于计算依赖关系;在 dubbo-admin 或 dubbo-monitor 会显示这个名字name,方便辨识-->
<dubbo:application name="demo-provider" owner="csz" organization="dubbox"/>
<!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!--使用 dubbo 协议实现定义好的 api.PermissionService 接口-->
<dubbo:service interface="red.wizard.api.service.ServiceDemo" ref="demoService" protocol="dubbo" />
<!--具体实现该接口的 bean-->
<bean id="demoService" class="red.wizard.provider.ServiceDemoImpl"/>
</beans>
最后在 src 目录下面直接新界 Provider 类内容如下
public class Provider {
private static final Logger logger = LoggerFactory.getLogger(Provider.class);
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("provider.xml");
context.start();
logger.info("dubbo 服务端已启动 《《《");
System.in.read();
}
}
直接启动绿箭头启动 main 函数

五、完善 consumer 子模块
consumer 子模块的 pom.xml 文件添加如下依赖:
<dependency>
<groupId>red.wizard</groupId>
<artifactId>api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6.SEC03</version>
<scope>compile</scope>
</dependency>
在 resources 文件夹下面新建 consumer.xml 文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="demo-consumer" owner="csz" organization="dubbox"/>
<!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!--使用 dubbo 协议调用定义好的 api.PermissionService 接口-->
<dubbo:reference id="demoService" interface="red.wizard.api.service.ServiceDemo"/>
</beans>
最后新建类 Consumer,内容如下:
public class Consumer {
private static final Logger logger = LoggerFactory.getLogger(Consumer.class);
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");
context.start();
logger.info(" dubbo 消费端已启动 》》》");
serviceDemo serviceDemo = (red.wizard.api.service.serviceDemo) context.getBean("demoService");
String hello = serviceDemo.SayHello("world");
logger.info(hello);
System.in.read();
}
}
绿箭头启动 consumer类 main函数

最后的效果如下:


浙公网安备 33010602011771号