说明:Springboot整合Dubbo完成分布式服务注册,笔者以调用订单信息时调用查询用户地址信息为例。
开发工具 Idea
父项目:springboot-dubbo-interface
提供者:springboot-dubbo-provider
消费者:springboot-dubbo-consumer
一、父项目:springboot-dubbo-interface
1.pom依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
2.UserAddress.java 公共实体类【网络传输对象】
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserAddress implements Serializable {
private Integer id;
private String userAddress;
private String userId;
}
3.UserService.java/OrderService.java 两个公共接口
public interface OrderService {
//查询订单,调用用户地址服务,返回用户地址
public List<UserAddress> initOrder(String userId);
}
------------------------------------------------------
public interface UserService {
/*查询用户所有的地址*/
public List<UserAddress> queryAllAddress(String userId);
}
二、提供者:springboot-dubbo-provider
1.pom依赖
<dependencies>
<!--继承父项目-->
<dependency>
<groupId>com.wang</groupId>
<artifactId>springboot-dubbo-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--apache dubbo-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.3</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
2.application.properties
# 1. application name
dubbo.application.name=springboot-service-provider
# 2. dubbo:registry address
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 3. dubbo:protocol
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
### 说明: 可以新建一个dubbo.properties 把上面的配置复制进去也可以。
3.UserServiceImpl.java 服务提供实现类
import com.wang.springboot.domain.UserAddress;
import com.wang.springboot.service.UserService;
import org.apache.dubbo.config.annotation.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @author 王一宁
* @date 2020/3/28 17:58
*/
@Service
public class UserServiceImpl implements UserService {
private static List<UserAddress> address = new ArrayList<UserAddress>();
static {
UserAddress userAddress = new UserAddress(1, "廊坊市固安县", "whsxt");
address.add(userAddress);
}
/*模拟查询数据库*/
@Override
public List<UserAddress> queryAllAddress(String userId) {
return address;
}
}
4.启动类上记得加上 @EnableDubbo //启用dubbo
三、消费者:springboot-dubbo-consumer
1.pom
<dependencies>
<!--父项目的依赖-->
<dependency>
<groupId>com.wang</groupId>
<artifactId>springboot-dubbo-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--apache dubbo-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.3</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2.application.properties
# 1.appname
dubbo.application.name=springboot-service-consumer
# 2.address
dubbo.registry.address=zookeeper://127.0.0.1:2181
3.OrderServiceImpl.java 消费者实现类
import com.wang.springboot.domain.UserAddress;
import com.wang.springboot.service.OrderService;
import com.wang.springboot.service.UserService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author 王一宁
* @date 2020/3/28 11:03
*/
@Service
public class OrderServiceImpl implements OrderService {
@Reference
private UserService userService;
/*查询所有的订单中调用用户查询地址的api接口*/
@Override
public List<UserAddress> initOrder(String userId) {
return userService.queryAllAddress(userId);
}
}
4.OrderController.java 这个是个web项目,用来体验结果
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private OrderService orderService;
@RequestMapping("/initOrder")
public List<UserAddress> initOrder(String userId){
return this.orderService.initOrder(userId);
}
}
四、开启你的zookeeper、dubbo-admin
1.启动 生产者项目
2.启动 消费者项目
3.可以在bubbo的web查看服务状态
http://127.0.0.1:7001/
4.访问自己的服务
http://localhost:8080/order/initOrder?userId=wang
返回结果:
[{"id":1,"userAddress":"廊坊市固安县","userId":"whsxt"}]