整合spring,编写一个由服务消费者调用服务提供者的例子:
消费者 order-service
提供者 user-service
共用的接口、pojo存放在 service-interface
user-service:
<dependencies>
<dependency>
<groupId>com.wang.dubbo</groupId>
<artifactId>service-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
</dependency>
</dependencies>
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<context:component-scan base-package="com.wang.dubbo" />
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="user-service" />
<!-- 使用zookeeper广播注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://192.168.1.139:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="28888" />
<!-- 和本地bean一样实现服务 -->
<bean id="userService" class="com.wang.dubbo.user.service.impl.UserServiceImpl"></bean>
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.wang.dubbo.user.service.UserService" ref="userService" />
</beans>
package com.wang.dubbo;
import com.wang.dubbo.user.service.UserService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
/**
* Created by wangteng on 2019/9/23.
*/
public class MainApplication {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:application.xml");
context.start();
System.in.read();
}
}
order-service:
<dependencies>
<dependency>
<groupId>com.wang.dubbo</groupId>
<artifactId>service-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
</dependency>
</dependencies>
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<context:component-scan base-package="com.wang.dubbo" />
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="order-service" />
<!-- 使用zookeeper广播注册中心暴露发现服务地址 -->
<dubbo:registry address="zookeeper://192.168.1.139:2181" />
<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<dubbo:reference id="userService" interface="com.wang.dubbo.user.service.UserService" />
</beans>
public class MainApplication {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:application.xml");
context.start();
UserService userService = (UserService) context.getBean("userService");
System.out.println(userService.getUserAddress());
System.in.read();
}
}
service-interface:
先启动user-service,再启动order-service,成功调用到服务
[UserAddress{name='王腾', phone='123456789', address='江苏南京玄武区'}, UserAddress{name='皇城', phone='785649321', address='新疆石河子十三连'}]
在dubbo管理控制台可以看到:
在导入依赖的时候:
导入Dubbo All,开始是导入了alibaba的包,报错java.lang.ClassNotFoundException: io.netty.channel.EventLoopGroup,然后换成了apache的Dubbo All
有报错,是忘了导入zookeeper的客户端操作依赖,又导入了Curator Framework的依赖
有报错java.lang.NoClassDefFoundError: org/apache/curator/framework/recipes/cache/TreeCacheListener,然后又导入了Curator Recipes的依赖,因为它包含了Curator Framework,所以把Curator Framework依赖换成Curator Recipes依赖
没有报错了