1.定义一个接口模块供外界访问
public interface UserApi {
public String say();
}
2.再定义一个模块来用于编写接口实现,对外提供dubbo服务
2.1因为要使用到dubbo的注解,所以先引入springboot和dubbo的依赖,同时因为要实现接口,所以也要把接口所在模块引入。
如下:
<dependency>
<groupId>org.example</groupId>
<artifactId>my-wx-dubbo-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--dubbo框架-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.4</version>
</dependency>
<!--zk依赖-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.13</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.32.Final</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
2.2配置dubbo和注册中心zk
# Spring boot application
spring.application.name = dubbo-service
# dubbo 扫描包配置
dubbo.scan.basePackages = com.itmark.wx
dubbo.application.name = dubbo-wx-service-provider
#dubbo 对外暴露的端口信息
dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880
#dubbo注册中心的配置
dubbo.registry.address = zookeeper://192.168.200.129:2181
dubbo.registry.client = zkclient
dubbo.registry.timeout = 60000
2.3编写接口实现类并添加dubbo的注解,指定服务版本号
@Service(version = "v1.0")
public class UserApiImpl implements UserApi {
@Override
public String say() {
return "Hello Dubbo Service ~~~";
}
}
3.准备调用模块
3.1因为调用者需要通过zk获取服务地址,通过dubbo来调用远程过程,所以需要引入dubbo相关依赖,同时本模块使用springboot进行开发,需要引入springboot相关依赖。当然本模块通过接口来接收rpc实例,所以也需要引入接口模块。
<dependency>
<artifactId>my-wx-dubbo-interface</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--web开发的起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- dubbo-->
<!--dubbo框架-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.4</version>
</dependency>
<!--zk依赖-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.13</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.32.Final</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
3.2配置dubbo
# Spring boot application
spring.application.name = dubbotest
server.port = 18081
#dubbo注册中心配置
dubbo.application.name = server-consumer
dubbo.registry.address = zookeeper://192.168.200.129:2181
dubbo.registry.client = zkclient
dubbo.registry.timeout = 60000
dubbo.consumer.timeout = 60000
3.3编写controller,并进行远程注入
@Controller
public class TestDubbo {
@Reference(version = "v1.0")
private UserApi userApi;
@RequestMapping("t1")
public void test1(){
String say = userApi.say();
System.out.println(say);
}
}