ApacheDubbo 远程通信快速入门
<groupId>com.dubbo.demo</groupId>
<artifactId>dubbo-demo</artifactId>
在 api 模块中定义一个接口,执行 mvn install 打包安装到本地。
package com.dubbo.demo.service;
public interface IUserService {
String getNameById(int id);
}
dubbo-provider、dubbo-consumer 添加依赖:
<dependency>
<groupId>com.dubbo.demo</groupId>
<artifactId>api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.5</version>
</dependency>
dubbo-provider 编写实现类。
package com.dubbo.demo.service.impl;
import com.dubbo.demo.service.IUserService;
public class UserServiceImpl implements IUserService {
@Override
public String getNameById(int id) {
System.out.println("id:" + id);
return "James:" + id;
}
}
dubbo-provider 创建配置文件:resources/META-INFO/dubbo-provider.xml
在配置文件中发布服务。
<?xml version="1.0" encoding="UTF-8"?>
<!-- 添加 DUBBO SCHEMA -->
<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-provider"/>
<!-- 连接到哪个本地注册中心 N/A表示不注册 -->
<dubbo:registry address="N/A"/>
<!-- 用 dubbo 协议在 20880 端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20800"/>
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.dubbo.demo.service.IUserService" ref="userService"/>
<!-- bean注册 -->
<bean id="userService" class="com.dubbo.demo.service.impl.UserServiceImpl"/>
</beans>
加载配置文件,通过 ClassPathXmlApplicationContext 加载启动。
package com.dubbo.demo;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class DubboProviderMain {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("classpath*:/META-INFO/dubbo-provider.xml");
context.start();
// 阻塞 main 线程
System.in.read();
}
}
启动之后,发布的地址是:dubbo://192.168.56.1:20800/com.dubbo.demo.service.IUserService
dubbo-consumer 创建配置文件:resources/META-INFO/dubbo-consumer.xml
配置远程服务的引用。
<?xml version="1.0" encoding="UTF-8"?>
<!-- 添加 DUBBO SCHEMA -->
<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-consumer"/>
<!-- 连接到哪个本地注册中心 N/A表示不注册 -->
<dubbo:registry address="N/A"/>
<!-- 生成远程服务代理 -->
<dubbo:reference
id="userService"
interface="com.dubbo.demo.service.IUserService"
url="dubbo://192.168.56.1:20800/com.dubbo.demo.service.IUserService"/>
</beans>
加载配置文件,从容器中获取远程代理对象的实例。
package com.dubbo.demo;
import com.dubbo.demo.service.IUserService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class DubboConsumerMain {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath*:/META-INFO/consumer.xml");
IUserService userService = (IUserService) context.getBean("userService");
System.out.println(userService.getNameById(1001));
}
}