流程
注册中心
- Zookeeper 注册中心: 基于分布式协调系统 Zookeeper 实现,采用
- Zookeeper 的 watch 机制实现数据变更(官方推荐)
- Multicast 注册中心: 基于网络中组播传输实现,不需要任何中心节点,只要广播地址,就能进行服务注册和发现
- Redis 注册中心: 基于 Redis 实现,采用 key/Map 数据结构存储,主 key 存储服务名和类型,Map 中 key 存储服务 URL,Map 中 value 存储服务过期时间,基于 Redis 的发布/订阅模式通知数据变更
- Simple 注册中心:一个普通的 Dubbo 服务,可以减少第三方依赖,使整体通讯方式一致,不支持集群
启动Dubbo
Dubbo资源我发布在"我的资源"
- 解压Dubbo-3.4.12.tar.gz到本地
- 在zookeeper-3.4.12目录下创建data目录
- 将zookeeper-3.4.12/conf目录下的zoo_sample.cfg文件重命名为zoo.cfg
- 修改zoo.cfg文件中的dataDir选项
- 启动zookeeper服务端双击zookeeper-3.4.12/bin/zkServer.cmd
- 启动zookeeper的客户端双击zookeeper-3.4.12/bin/zkCli.cmd
- 在dubbo-admin.jar所在目录执行java-jar dubbo-admin.jar Dubbo就启动了
- 总结一下就是在启动dubbo-admin.jar之前我们需要先启动注册中心,注册中心这里我用的Zookeeper,当然其他也一样,Zookeeper默认的端口号为2181,Dubbo控制台默认端口号是7001,账号密码都是root,不要弄混了
HelloWorld
以Zookeeper注册中心为例:
接口:
public interface sayHello{
void hello(String name);
}
提供者
配置+接口实现类:
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://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://dubbo.apache.org/schema/dubbo
http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!-- 应用名称 -->
<dubbo:application name="hello-service" />
<!-- 配置服务注册中心 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<!-- 配置发布服务的协议和端口号 -->
<dubbo:protocol name="dubbo" port="9090" />
<!-- 配置服务实现类对象 -->
<bean id="helloService"
class="com.etoak.service.impl.HelloServiceImpl" />
<!-- 发布服务 -->
<dubbo:service ref="helloService"
interface="com.etoak.service.HelloService">
</dubbo:service>
</beans>
/*
*接口的实现类
*/
public class sayHelloImpl implements sayHello{
@Override
public void hello(String name){
System.out.println("Hello"+ name);
}
}
测试类
/*
*测试类
*/
public class Provider{
public static void main(String[] args){
//读配置文件
new ClassPathXmlApplicationContext("provider.xml");
//保持提供者存活
System.in.read();
}
}
先开Dubbo,再运行测试类
运行
运行后,去7001控制台看看是否有我们provider提供的服务:
发现是有的,说明截止到目前一切是ok的
消费者
所谓消费者的意思就是需要将服务从注册中心订阅下来,然后执行
配置
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://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://dubbo.apache.org/schema/dubbo
http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!-- 应用名称 -->
<dubbo:application name="hello-consumer" />
<!-- 配置注册中心 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<!-- 引用远程服务,创建远程服务的代理对象 -->
<dubbo:reference id="hello"
interface="com.etoak.service.HelloService">
</dubbo:reference>
</beans>
测试类
public class Consumer {
public static void main(String[] args) {
ApplicationContext ioc = new
ClassPathXmlApplicationContext("consumer.xml");
// 远程服务的代理对象
HelloService service = ioc.getBean("hello", HelloService.class);
String result = service.hello("Dubbo");
System.out.println(result);
System.in.read();
}
}
运行
我们发现控制台打印了提供者的发布的方法,Dubbo也能看到provider和Consumer说明我们的代码是没有问题的
总结
单机版的Dubbo就说这么多吧,我们慢慢向微服务去过度