SpringBoot集成Dubbo
在linuxg中启动zookeeper服务
zookeeper安装步骤详见linux安装zookeeper
在idea中创建一个Springboot项目作为服务提供者
导入相关依赖(注意zookeeper依赖的版本一定要和自己虚拟中的服务版本一致,否则会导致版本问题)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.8</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
编写application.properties配置文件
# 为了保证项目端口不冲突 需要修改一个端口
server.port=8888
# 服务名称 不能跟别的服务提供者重复
dubbo.application.name=provider
# 指定注册中心
dubbo.registry.protocol=zookeeper
# 注册中心地址
dubbo.registry.address=192.168.128.128:2181
# 协议固定写dubbo 以及服务暴露的端口
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
# 设置超时时间
dubbo.registry.timeout=30000
dubbo.config-center.timeout=30000
# 扫描包的路径
dubbo.scan.base-packages=com.test.service.impl
编写要暴露的接口以及对应的实现类
接口
package com.test.service;
public interface UserService {
String getMsg();
}
实现类
package com.test.service.impl;
import com.zhiyou.service.UserService;
import org.apache.dubbo.config.annotation.DubboService;
@DubboService //表示这个接口,同时也可以将对象注入到IOC容器中
public class UserServiceimpl implements UserService {
@Override
public String getMsg() {
System.out.println("----------------------------被调用了----------------------------");
return "idea中的服务提供方的service实现";
}
}
在启动类中加入 @EnableDubbo 注解 并启动 提供服务
@EnableDubbo // 代表开启Dubbo服务
@SpringBootApplication
public class DubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
}
}
在idea中再创建一个新的Springboot项目作为服务消费者
依赖与服务提供者相同
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.8</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
编写配置文件
# 服务名称 不能跟别的服务提供者重复
dubbo.application.name=consumer
# 指定注册中心
dubbo.registry.protocol=zookeeper
# 注册中心地址
dubbo.registry.address=192.168.139.131:2181
# 协议固定写dubbo 以及服务暴露的端口
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
# 设置超时时间
dubbo.registry.timeout=30000
dubbo.config-center.timeout=30000
编写与服务提供者完全相同的接口(不需要实现类)
package com.test.service;
public interface UserService {
String getMsg();
}
编写controller调用服务
注意此处用的是 @DubboReference注解,而不再是@Autowired
@RestController
public class UserController {
@DubboReference
UserService userService;
@RequestMapping("hello")
public String hello(){
System.out.println(userService.getMsg());
return userService.getMsg();
}
}
也在启动类中加上@EnableDubbo注解并启动服务
@EnableDubbo
@SpringBootApplication
public class DubboConsumberApplication {
public static void main(String[] args) {
SpringApplication.run(DubboConsumberApplication.class, args);
}
}
然后先启动服务提供者项目,在启动服务消费者项目,访问消费者的controller,发现成功调用服务提供者。
http://localhost8080/hello