创建业务接口工程
我们将这个接口单独抽取出来,打成jar包被多个服务锁依赖
创建服务提供者Provider
Provider工程的pom文件如下:
<properties>
<!--2.6.4版本的duboo依赖的Spring的版本-->
<spring-version>4.3.16.RELEASE</spring-version>
</properties>
<dependencies>
<dependency>
<groupId>com.dubbo.test</groupId>
<artifactId>00-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--dubbo的依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.4</version>
</dependency>
<!--Spring的依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-version}</version>
</dependency>
</dependencies>
spring-dubbo-provider.xml的配置如下所示:
这里需要注意的是xml文件头的问题,一定要注意,否则启动会报异常:
Exception:通配符的匹配很全面, 但无法找到元素 'dubbo:application' 的声明;
<?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="01-first-provider"/>
<!--注册service ,其就是真正的服务提供者-->
<bean id="service" class="com.test.service.someServiceImpl"/>
<!--将service的服务暴露 确定接口,确定实现,使用点对点的方式连接,暂时不是用Zookeeper-->
<dubbo:service interface="com.test.service.someService"
ref="service"
registry="N/A" />
</beans>
启动类 providerRun如下所示
/**
* 启动类
*/
public class providerRun {
public static void main(String[] args) throws IOException {
//在容器启动到时候,就把我们的服务注册到注册中心,或者称之为暴露
//创建Spring容器
ApplicationContext ac = new ClassPathXmlApplicationContext("spring-dubbo-provider.xml");
//Spring容器启动
((ClassPathXmlApplicationContext) ac).start();
//使当前主线程阻塞,以提供持续服务
System.in.read();
}
}
创建服务的消费者Consumer
pom.xml内容如下:
<properties>
<!--2.6.4版本的duboo依赖的Spring的版本-->
<spring-version>4.3.16.RELEASE</spring-version>
</properties>
<dependencies>
<dependency>
<groupId>com.dubbo.test</groupId>
<artifactId>00-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--dubbo的依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.4</version>
</dependency>
<!--Spring的依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-version}</version>
</dependency>
</dependencies>
spring-dubbo-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="01-first-consumer"/>
<!--确定服务接口,确定连接方式-->
<dubbo:reference id="someService"
interface="com.test.service.someService"
url="dubbo://localhost:20880"/>
</beans>
启动类如下所示:
/**
* consumer启动兼服务消费类
*/
public class consumerRun {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("sprin-dubbo-consumer.xml");
someService service = (someService) ac.getBean("someService");
service.hello("Toney");
}
}
运行测试
我们先启动服务提供者providerRun,再启动消费者consumerRun,观察到如下信息
我们通过消费者consumer在自己工程的Spring容器中获取到的someService引用,成功调用了provider工程的hello方法
至于中途是怎么调用的,就要着重关注我们的两个spring配置文件了
使用Zookeeper注册中心
在上一个案列中,我们使用的是直连的方式建立连接,现在我们采用ZK作为我们的注册中心
Dubbo的注册中心官方推荐的就是Zookeeper
工程的话,复制服务提供者和消费者,稍加改动即可
改造服务的提供者Provider
pom.xml文件 增添一个依赖即可:
<!-- ZK的客户端依赖:在进入到阿帕奇孵化器后由zkClient改为curator -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
配置文件如下所示:增改
使用的是集群的方式,集群机器的先后顺序没有影响
<!--声明ZK服务中心 (单机)-->
<!--<dubbo:registry address="zookeeper://192.168.159.159:2181"/>-->
<!--第二中方式声明ZK服务中心 (单机)-->
<!--<dubbo:registry protocol="zookeeper" address="192.68.159.159:2181" />-->
<!--声明ZK服务中心,ZK集群的方式-->
<dubbo:registry address="zookeeper://192.168.159.159:2181?backup=192.168.159.169:2181,192.168.159.179:2181"/>
<!--指定实列名,指定服务接口,不指定url,默认为ZK-->
<dubbo:reference id="someService"
interface="com.test.service.someService"/>
改造服务消费者Consumer
pom.xml 添加一个依赖
<!-- ZK的客户端依赖:在进入到阿帕奇孵化器后由zkClient改为curator -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
配置文件如下所示: 增改
<!--声明ZK服务中心 (单机)-->
<!--<dubbo:registry address="zookeeper://192.168.159.159:2181"/>-->
<!--第二中方式声明ZK服务中心 (单机)-->
<!--<dubbo:registry protocol="zookeeper" address="192.68.159.159:2181" />-->
<!--声明ZK服务中心,ZK集群的方式-->
<dubbo:registry address="zookeeper://192.168.159.159:2181?backup=192.168.159.169:2181,192.168.159.179:2181"/>
<!--指定实列名,指定服务接口,不指定url,默认为ZK--> <dubbo:reference id="someService" interface="com.test.service.someService"/>
启动Zookeeper的服务
我们指定了ip为192.168.159.159这台机器上的ZK,那我们就启动之,
详情翻阅:https://www.cnblogs.com/msi-chen/p/11068925.html(ZK的单机&集群环境搭建)
运行测试
首运行服务提供者。其次运行服务消费者,我们观察控制台输出
再观察消费者的控制台,我做了点修改,得到了返回值并打印:
连接单机ZK,集群ZK都已测试通过,暂时就写到这儿吧,我要做一个被写代码耽误的中华小当家(煮夫!!)