
刚开始搜了许多springboot集成dubbo案例,试了两三个都不行,之后我是根据慕课网的一个Dubbo案例来进行跟着学习搭建。
当前项目是Dubbo+Zookeeper的一个简洁版集成案例,以Zookeeper作为注册中心,所以请提前进行Zookeeper的安装配置。
配套代码:github-springboot-dubbo、gitee-springboot-dubbo
所有博客文件目录索引:博客目录索引(持续更新)
采用模块化进行开发:
pom.xml:父pom依赖
dubbo-interface4.0.0 com.changlu springboot-dubbo 1.0-SNAPSHOT dubbo-producer dubbo-interface dubbo-consumer pom org.springframework.boot spring-boot-starter-parent 2.1.12.RELEASE 1.8 2.1.12.RELEASE 2.7.4.1 org.springframework.boot spring-boot-dependencies ${spring-boot.version} pom import org.apache.dubbo dubbo-dependencies-bom ${dubbo.version} pom import org.apache.dubbo dubbo ${dubbo.version} org.springframework spring javax.servlet servlet-api log4j log4j com.changlu dubbo-interface 1.0-SNAPSHOT com.changlu dubbo-producer 1.0-SNAPSHOT
首先进行接口模块的定义,主要是定义其中的service接口:
pom.xml:
springboot-dubbo com.changlu 1.0-SNAPSHOT 4.0.0 dubbo-interface
pojo/user.java:
package com.changlu.pojo;
import java.io.Serializable;
public class User implements Serializable { //注意进行序列化
private String name;
private String sex;
private Integer age;
public User(String name, String sex, Integer age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + ''' +
", sex='" + sex + ''' +
", age=" + age +
'}';
}
}
/service/UserService.java:
package com.changlu.service;
import com.changlu.pojo.User;
public interface UserService {
User getUserById(Integer id);
}
pom.xml:
springboot-dubbo com.changlu 1.0-SNAPSHOT 4.0.0 dubbo-producer org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web org.apache.dubbo dubbo-spring-boot-starter 2.7.4.1 org.apache.dubbo dubbo org.apache.dubbo dubbo-dependencies-zookeeper ${dubbo.version} pom org.slf4j slf4j-log4j12 com.changlu dubbo-interface
application.yml:
# 手动指定版本号,分别表示:大版本.中版本.小版本。【大版本一般以年为单位,中版本一般是指某个功能大的迭代,小版本则是小功能的升级】
demo:
service:
version: 1.0.0
server:
port: 8801
spring:
application:
name: producer
dubbo:
# 协议
protocol:
name: dubbo
port: -1
# 注册配置
registry:
# 注册地址
address: zookeeper://192.168.10.40:2181
# 缓存信息
file: C:Users93997Desktopupload/dubbo-cache${spring.application.name}dubbo.cache
# 扫描指定的service包
scan:
base-packages: com.changlu.service
service/UserServiceImpl.java:
package com.changlu.service;
import com.changlu.pojo.User;
import org.apache.dubbo.config.annotation.Service;
//注意:这里的service是dubbo中的service注解
@Service(version = "${demo.service.version}")
public class UserServiceImpl implements UserService{
@Override
public User getUserById(Integer id) {
return new User("changlu", "男", 18);
}
}
DubboProducerApplication.java:
package com.changlu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@EnableAutoConfiguration
public class DubboProducerApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProducerApplication.class, args);
}
}
dubbo-consumer
pom.xml:
springboot-dubbo com.changlu 1.0-SNAPSHOT 4.0.0 dubbo-consumer org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web org.apache.dubbo dubbo-spring-boot-starter 2.7.4.1 org.apache.dubbo dubbo org.apache.dubbo dubbo-dependencies-zookeeper ${dubbo.version} pom org.slf4j slf4j-log4j12 com.changlu dubbo-interface
application.yml:
# 手动指定版本号,分别表示:大版本.中版本.小版本。【大版本一般以年为单位,中版本一般是指某个功能大的迭代,小版本则是小功能的升级】
demo:
service:
version: 1.0.0
server:
port: 8802
spring:
application:
name: consumer
dubbo:
# 通信协议
protocol:
name: dubbo
port: -1 # -1表示随机使用一个端口号进行监听,对于服务发现并不是靠端口号,无需特别关注
# 注册配置
registry:
# 注册地址
address: zookeeper://192.168.10.40:2181
# 缓存信息
file: C:Users93997Desktopupload/dubbo-cache${spring.application.name}dubbo.cache
controller/UserController.java·:
package com.changlu.controller;
import com.changlu.pojo.User;
import com.changlu.service.UserService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
//使用dubbo提供依赖注入注解,指定版本号
@Reference(version = "${demo.service.version}")
private UserService userService;
@GetMapping("/user")
public User userInfo(){
return userService.getUserById(123);
}
}
DubboConsumerApplication.java:
package com.changlu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DubboConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(DubboConsumerApplication.class, args);
}
}
测试演示
1、首先启动生产者也就是先让对应的服务进行注册到zookeeper注册中心上:注意若是出现以下信息表示注册成功
2、启动消费者,也就是我们的web模块
若是出现以下log信息同样也表示连接zookeeper成功
3、最后打开浏览器来进行接口测试:出现以下信息就表示RPC调用成功,你也可以自己通过debug来进行调试
我是长路,感谢你的耐心阅读。如有问题请指出,我会积极采纳!
欢迎关注我的公众号【长路Java】,分享Java学习文章及相关资料
Q群:851968786 我们可以一起探讨学习
注明:转载可,需要附带上文章链接