dubbo 现在归到 apache 旗下管理。开了新的维护,对 springboot 也做了适配更新。
我最近搜索到的相关知识点,大部分集成的Dubbo都是非官方的版本或者是一些老旧的版本,有一些都是个人封装的。还有一些在springboot下还在用xml配置文件来引入Dubbo。这违背了springboot的初衷。既然Dubbo官方都开始维护,并且官方都发布针对springboot的支持,所以写下这篇文章,希望能填补这方面的空白,减少新人掉坑的耗时耗力,快速上手官方给出的适配。
这里是用单服务器运行,并没有部署zookeeper集群。
dubbo 官网:
http://dubbo.apache.org/
dubbo spring boot 官网:
https://github.com/apache/incubator-dubbo-spring-boot-project/blob/master/README_CN.md
提供者
一、首先安装zookeeper,dubbo-admin
1.
zookeeper 下载地址:https://archive.apache.org/dist/zookeeper/
zookeeper 安装:http://dubbo.apache.org/books/dubbo-admin-book/install/zookeeper.html
推介下载3.4.12稳定版。下载,解压。
复制 zookeeper3.4.12 - conf - zoosample.cfg 重命名为:zoo.cfg
(zookeeper 会默认加载 zoo.cfg配置文件 )
zookeeper 目录下(和bin对齐目录)新建 data 文件夹
修改 zoo.cfg 里 dataDir= "写你的data文件夹的完整路径" 例如:/root/zookeeper/data
进入bin,windows 启动 zkServer.cmd Linux 启动 ./zkServer.sh
2.
dubbo-admin 安装:https://github.com/apache/incubator-dubbo/tree/dubbo-2.6.0
下载好项目后,用 eclipse 或者 Intellij idea 等开发工具,导入admin工程,直接打war包,放入tomcat运行即可。
二、关键环节。我们的 spring boot 应用程序编写。
1.新建 springboot工程
这里注意,工程必须为1.5.x 版本,否则不可以使用。我这里是 1.5.9.RELEASE(官方正在推出2.0.x的版本。以后也主打2.0.x以上的版本)
PS: dubbo官方现在已经支持 springboot 为2.0.x 以上版本,对应dubbo的maven依赖版本为 0.2.0
2.导包
<!-- Dubbo -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.1.0</version>
</dependency>
<!-- zookeeper 连接 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.7</version>
</dependency>
3.写一个接口(随意。可参考上面给出的官方文档例子)
写一个实现类
接口的实现类上面加注解@Service 。
注意是引这个包下的。(import com.alibaba.dubbo.config.annotation.Service;)
这里说明下,官方给出的@Service ( ** *** ***),里面的参数,是可以不写的。看官方文档给出的参数对照表,里面都是可选参数,不是必填的。所以这里,我们没有写。下面第“4.配置文件”给出的参考地址,有详细的配置信息参数说明。
4.配置文件
dubbo:
application:
name: dubbo_txuser
protocol:
name: dubbo
port: 20880
registry:
address: zookeeper://xxx.xxx.xxx.xxx:2181
scan:
base-packages: com.example.prom.exposeinterface
配置具体意思,官方中文文档写的很明白了。
参考地址:http://dubbo.apache.org/#/docs/dev/build.md?lang=zh-cn 里面找 schema 配置参考手册,就可以明白
这里说下,com.example.prom.exposeinterface 对应的目录结构,如图:
我对外暴露的接口和实现类,都在这个包下。所以,直接写此包就可以了。
5. 更改启动类
package com.example.prom;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
@SpringBootApplication
public class PromApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(PromApplication.class)
.web(true) // true 表示为web工程。false 为非web工程,一般用于专门提供接口的jar
.run(args);
}
}
到这里,我们的服务提供方就可以了。
运行我们刚刚打好的 dubbo-admin war包,启动 dubbo-admin 工程,例如:127.0.0.1/dubbo-admin,
用户名和密码为:root
此处改为中文
选择 服务治理-服务
此处成功展现,为发布成功。
点击上图的接口,可以看到详细信息。
点击 ip地址 进去。有详细信息
消费者
一、将 提供者 工程打jar包,我们在这里要引用。(正式开发,只需要将暴露的接口工程打包,引用。)
1.新建 springboot工程
这里注意,工程必须为1.5.x 版本,否则不可以使用。我这里是1.5.9(官方正在推出2.0.x的版本。以后也主打2.0.x以上的版本)
PS: dubbo官方现在已经支持 springboot 为2.0.x 以上版本,对应dubbo的maven依赖版本为 0.2.0
2.导包
<!-- provider 引用 -->
<dependency>
<groupId>com.dubbo</groupId>
<artifactId>provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- Dubbo -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.1.0</version>
</dependency>
<!-- zookeeper 连接 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.7</version>
</dependency>
3.新建一个对象,调用提供者接口
package com.dubbo.consumer.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.dubbo.provider.service.ProviderService;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ConsumerController {
@Reference(
version = "${demo.service.version}",
application = "${dubbo.application.id}"
)
private ProviderService providerService;
@RequestMapping("/")
@Transactional
public String getProvider() {
String result = providerService.sayHeloo();
return result;
}
}
注解说明,参考地址:http://dubbo.apache.org/#/docs/dev/build.md?lang=zh-cn
@Reference() 里面的 version 和 application 参数为可选配置,可以不写,参考地址里有详细说明。
4.配置文件
server:
port: 9090
dubbo:
application:
name: consumer
id: consumer
protocol:
name: dubbo
port: 20881
id: dubbo
registry:
address: zookeeper://xxx.xxx.xxx.xxx:2181
demo:
service:
version: 0
5.更改启动类
在@SpringBootApplication注解后,加上包扫描地址(scanBasePackages = "com.dubbo.consumer.controller")
package com.dubbo.consumer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(scanBasePackages = "com.dubbo.consumer.controller")
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
到这里,消费者就完成了。我们启动消费者项目。
下图总,我们可以看到消费者信息。
点击 ip地址 进去。有详细信息