开发者学堂课程【基于 Zookeeper、Dubbo 构建互联网分布式基础架构:Springboot 如何整合 dubbo(2)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/635/detail/10167
Springboot 如何整合 dubbo(2)
目录:
一、继上节模块及启动
二、写实现类
一、继上节模块及启动
接着写一个主程序
右击 serviceimpldubbo 下的 java,new 一个 java class,命名为com.qiangfeng.springboot.dubbo.App
进入后先在主函数上添加 @SpringBootApplication,然后在主函数中写入 main 方法,
代码如下:
@SpringBootApplication
public class App {
public static void main(String[] args){
SpringApplication.run(App.class);
}
写完后先来启动,它会启动app所在的包以及子包下所有的类
结果报错,原因是代码
<!—用于健康状态检查的-->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-actuator</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
导错包,修改为如下
<!—用于健康状态检查的-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
再来启动,启动成功后再来写实现类
二、写实现类
点击springbootdubboonline,new一个module,点击Maven,找到webapp,创建一个web项目,Artifactid为webdubbo
创建完后,添加依赖,
输入以下:
<dependency>
<groupId>com.qianfeng</groupId>
<artifactId>servicedubbo</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
引入后点击main,在main下创建一个java,然后右击java创建一个java class,
命名为:
com.qianfeng.springboot.dubbo.controller.TestController
进入后加入注解:
@RestController
@RequestMapping(“/test”)
//加一个路径test
然后在主函数中输入 private TestService testService
,以前使用@Autowired 进行注解,此处也不使用@Autowired ,使用@Reference进行注解,也需要配version和id,
代码如下:
public class TestController {
@Reference (version = “1.0”,application = “”)
private TestService testService;
继续在主函数中输入:
public String getData(String name) {
String data = testService.getData(name);
return data;
再加入注解,
修改如下:
@RequestMapping(“/getdata/{name}”)
public String getData(@PathVariable(“name”String name) {
String data = testService.getData(name);
return data;
之后将serviceimpldubbo下的application.yml移到webdubbo下的resources中,
修改一下
spring:
application:
name:dubbo-consumer-demo
server:
port:8080
dubbo:
application:
id:dubbo-consumer
name:dubbo-consumer
protocol:
id:dubbo
name:dubbo
port:23456
registry:
id:my-reg
address: zookeeper://192.168.3.224:2181
配置完后再点击 com.qianfeng,new 一个 java class,名为 App
新建一个 App.java
新建进入后,在主函数上添加 @SpringBootApplication,再在主函数中重写方法,
代码如下:
@SpringBootApplication(scanBasePackages= {“com.qianfeng.springboot.dubbo”})
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class);
写完后启动,在启动过程中查看serviceimpldubbo下的com.qianfeng.springboot.server.impl,
发现代码base-packages导错包,
修改为base-packages:com.qianfeng.springboot
停止启动,先来看页面
如图,可以看到没有提供者,因为刚才扫错包
接着再来启动提供者,启动起来后再来查看页面
显示正常,点击后可以看到如图
提供者是192.168.3.84:20880
消费者是192.168.3.84
应用有两个,分别是 dubbo-consumer,dubbo-provider
说明 serviceimpldubbo 服务已经发布出去了,webdubbo 已经收到了。
接着可以访问测试,输入网址 localhost:8080/test/getdata/abc,网络报错
有可能提供者没有注册上来,现在关掉再来启动消费者。再来刷新页面,发现还是报错
再来全部停掉,然后启动 webdubbo 下的 App,使用调试启动 Debug’App(1)’,然后打点 TestController 中的代码 String data=testService.getData(name),访问页面再来返回看代码,
显示如图:
然后放行,之后刷新页面,页面显示结果为 result=abc
可以看到已经拿到数据,返回的 data 为 result=abc,我们传的是abc,但是返回的是result=abc 呢?
我们会发现是通过testService 方法返回的。现在是两个web项目,webdubbo 项目中拿到另外一个web项目中的对象,这样让 dubbo 整合出了springboot模式。
Springboot 主要的目的就是减少配置,只需要将变化的例如中心地址、端口、名字修改就可以