开发者学堂课程【基于 Zookeeper、Dubbo 构建互联网分布式基础架构:Springboot 如何整合 dubbo(1)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/635/detail/10166
Springboot 如何整合 dubbo(1)
目录:
一、复习回顾
二、用 springboot 整合 dubbo
一、复习回顾
上节内容对于 dubbo 的整合做了一个分布式的项目,演示怎么进行拆分、怎么进行通信,使用了 mvc 框架进行了操作。
那么现在我们了解 springboot 开始流行,接着本节就讲解如何将之前的项目切换到springboot 环境中。
在前面内容中,讲到了几个项目模块:service、serviceimpl、testweb。
其中 web 作为消费者,service 作为提供者,分析过两者不放在一个项目中的原因,此处不再复述。
然后我们将 serviceimpl 做成了 web 程序,跑到了一个服务器上,将 testweb 也跑到另一个服务器上,然后通过网络请求的方式让两者进行通信,从而让 web 拿到服务里的一些具体的实现。
而 service 作为中间人,两者实现的共同接口,这样才能让web中有定义的一个类型去引入 serviceimpl。
二、用 springboot 整合 dubbo
首先以maven创建工程建立一个quickstart,groupID为com.qianfeng,ArtifactId为springboot-dubbo,
下一步,显示名字已存在,
将 Project name 改为 springbootdubboonline,点击 finish。创建完项目后,把src删掉。
1.引入依赖
第一步先引入 spring 依赖,把这个项目的父声明为 springboot 即可。
在代码上添加如下代码:
org.springframework.boot spring-boot-starter-parent
1.5.9.RELEASE
声明后需要添加依赖,继续找到代码
,在两者间插入如下代码:
org.springframework.boot
spring-boot-starter-web
此处不需要添加版本号,springboot 会自动将版本依赖过来,接下来再添加一个dubbo 的依赖,
输入如下:
com.alibaba.boot
dubbo-spring-boot-starter
1.0.0-SNAPSHOT
接下来添加第三个依赖,因为 dubbo 和 springboot 进行整合需要加入一个检查状况的健康依赖,
输入如下:
com.alibaba.boot
dubbo-spring-boot-actuator
1.0.0-SNAPSHOT
在idea中还需要添加两个依赖包,否则 springbooot 会报错,继续插入如下:
ch.qos.logback
logback-core
ch.qos.logback
logback-classic
既然要整合,还需要整合 zookeeper,所以还需要整合 zookeeper 的客户端,
输入如下:
com.101tec
zkclient
0.10
以上添加完所有依赖,下一步就是来做项目
2.做项目,创建模块
建三个模块,第一个模块是接口,实现类会实现接口,web会定义接口类型。先写一个quickstart,ArtifactId为servicedubbo,创建完成。
把AppTest删掉,删掉后才可以删APP,在com.qianfeng上新建一个class,命名为springboot.dubbo.service.TestService,Kind选为Interface。
创建完后在主函数中输入代码,
即如下:
public interface TestService {
/**
*没有任何实际意义,主要是为了演示功能
*@param name
*@return
*/
String getData(String name);
}
接口创建完后建立第二个模块来实现,会被当作服务发送出去
新建 archetype-webapp,ArtifactId为serviceimpldubbo,创建成功。
创建完成后可以把项目安装一下,右击 servicedubbo,点击 Run Maven,点击install。安装之前把整个父安装一下,否则子无法安装。
先右击 springbootdubboonline,点击 Run Maven,点击 install。安装的目的是安装到本地仓库。
之后在代码中添加依赖:
找到代码,在两者间插入如下:
com.qianfeng
servicedubbo
1.0-SNAPSHOT
引入依赖后需要写实现,点击serviceimpldubbo下的src,右击main新建一个Directory,命名为java,标记为Sources Root,点击java,点击Mark Directory as,点击 Sources Root。
再写一个包,点击java,点击new,java class,name为:
com.qianfeng.springboot.service.impl.TestServiceImpl
进入后重写方法代码如下并加入注解:
//前面加注解时我们使用@Service加注解,但是注意,此处不是用这个注解
//相当于我们原先在xml配置文件中配置的东西
@Service(version = “1.0”,application = “”,protocol = “”,registry = “”)
//此注解的作用就是创建这个类型的对象,然后作为服务提供者发布出去(该注解中可以加如上参数)
public class TestServiceImpl implements TestService {
@Override
public String getData(String name) {
return “result =” +name;
application相当于名字,protocol相当于协议,registry相当于注册地址,其实就是将另外一边xml文件中配置的东西转换到这边。
@Service(version = “1.0”,application= “”,protoclo = “”,registry = “”)这样写容易写死,现在不写死它,将它写到一个配置文件中
写一个配置文件,右击resources,new一个file,命名为application.yml
创建完后输入:
spring:
application:
name:
相当于有spring标签、application标签、name标签,依赖于缩进,现在起名为dubbo-provider-demo,在name后输入dubbo-provider-demo
需要明白,我们这个项目若想要启用成web项目,需要一个端口,所以继续指定:
server:
port:9090
dubbo:
scan:
base-packages:com.qianfeng.springboot.dubbo #base-packages的作用是用于扫描我们的dubbo的注解,比如@service。在base-packages后加入包
继续输入:
application:
id:dubbo-provider
name:dubbo-provider
protocol: //配置protocol
id:dubbo
name:dubbo
port:12345
status:server #标明是一个 server
registry: //配置registry
id:my-reg
address:zookeeper://192.168.3.224:2181
再来加入是否发布服务的选项,
继续输入:
endpoints:
dubbo:
enabled:true
为了监控,再加入如下:
management: //用于管理
port:9091
health:
dubbo:
status:
extras:load,threadpool //监听健康状态
defaults:memory
以上就完成了配置,相当于将上节 xml 文件中的配置转换。
有了配置后进行取,如下
@Service(version=“1.0”,application=
“${dubbo.application.id}”,protocol= “${dubbo.protocol.id}”,registry = “${dubbo.registry.id}”)