上篇说了一下Dubbo的大体架构以及主要组件。
这篇说一下如何将服务发布到注册中心
- 开发背景
jdk1.8
dubbo2.5.3
zookeeper2.4.6 - zookeeper安装
zookeeper安装方式自行百度即可 - 服务注册
项目结构
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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.levin.dubbo.server</groupId>
<artifactId>dubbo-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>dubbo-server</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.1-GA</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
<exclusion>
<artifactId>jms</artifactId>
<groupId>javax.jms</groupId>
</exclusion>
<exclusion>
<artifactId>mail</artifactId>
<groupId>javax.mail</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
</dependencies>
</project>
Provider.java
package com.levin.dubbo.server;
/**
*
*
* __ __
* / \~~~/ \
* ,----( .. )
* / \__ __/
* /| (\ |(
*^ \ /___\ /\ |
* |__| |__|-"
*
*@Description: TODO
*@author Levin
*@since JDK 1.7
*@date 2017年4月15日 下午4:03:09
*/
public interface Provider {
/**
* 需要发布的方法
* @Title: sayHello
* @return
* @author Levin
*/
String sayHello();
}
ProviderImpl.java
package com.levin.dubbo.server.impl;
import com.levin.dubbo.server.Provider;
public class ProviderImpl implements Provider {
public String sayHello() {
return "The first Dubbo Service";
}
}
DubboServiceMain.java
package com.levin.dubbo.server.main;
import java.io.IOException;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class DubboServiceMain {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationProvider.xml"});
context.start();
System.out.println("按任意键退出.....");
System.in.read();
}
}
applicationProvider.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="dubbo-server" />
<!-- 注册地址 -->
<dubbo:registry address="zookeeper://192.168.1.201:2181" />
<!-- 接口的位置 -->
<!--
executes:服务提供者每服务每方法最大可并行执行请求数 default/0
group:服务分组,当一个接口有多个实现,可以用分组区分
path:服务路径 (注意:1.0不支持自定义路径,总是使用接口名,如果有1.0调2.0,配置服务路径可能不兼容)
delay:延迟注册服务时间(毫秒) ,设为-1时,表示延迟到Spring容器初始化完成时暴露服务 default/0
timeout:远程服务调用超时时间(毫秒) default/1000
retries:远程服务调用重试次数,不包括第一次调用,不需要重试请设为0 default/2
connections:对每个提供者的最大连接数,rmi、http、hessian等短连接协议表示限制连接数,dubbo等长连接协表示建立的长连接个数 defualt/100
loadbalance:负载均衡策略,可选值:random,roundrobin,leastactive,分别表示:随机,轮循,最少活跃调用 default/random
async:是否缺省异步执行,不可靠异步,只是忽略返回值,不阻塞执行线程 default/false
token:令牌验证,为空表示不开启,如果为true,表示随机生成动态令牌,否则使用静态令牌,令牌的作用是防止消费者绕过注册中心直接访问,保证注册中心的授权功能有效,如果使用点对点调用,需关闭令牌功能
-->
<dubbo:service interface="com.levin.dubbo.server.Provider"
ref="providerImpl" executes="10" />
<!-- 实现bean,客户端应用的bean就以这个id名称为主 -->
<bean id="providerImpl" class="com.levin.dubbo.server.impl.ProviderImpl" />
</beans>
编写完后运行DubboServiceMain中的main方法,运行后会按照xml中的配置将之前的Provider 接口发布到注册中心.
检查方法如下
使用zkCli命令连接zookeeper
sh zkCli.sh
进入zkClient控制台,发现根目录下是否产生dubbo目录,并且是否有刚刚发布的接口
ls /dubbo/com.levin.dubbo.server.Provider
如果存在那么,则说明服务已经发布到注册中心,下篇我们就来说说如何使用Consumer发现注册中心的服务,并且调用。