1、创建三个SpringBoot项目,分别是服务提供者、服务消费者和接口。
2、在boot-order-consumer和boot-user-service-provider中分别依赖gmall-interface
<dependency>
<groupId>com.dhu.gmall</groupId>
<artifactId>gmall-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
3、导入依赖
(1)dubbo github :https://github.com/apache/dubbo
·引入 dubbo-starter
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>
·使用zookeeper客户端 参考官方文档:http://dubbo.apache.org/zh-cn/docs/user/references/registry/zookeeper.html
注意:在2.7.x的版本中已经移除了zkclient的实现,如果要使用zkclient客户端,需要自行拓展
使用 curator 客户端
从 2.3.0
版本开始支持可选 curator 实现。Curator 是 Netflix 开源的一个 Zookeeper 客户端实现。
<!--引入dubbo-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.5</version>
</dependency>
<!--注册中心使用的是zookeeper,需要引入操作zookeeper的客户端-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.13.0</version>
</dependency>
4、配置
以前的项目工程,我们需要XML配置文件来配置,springboot项目在application.properties配置。
dubbo.application.name=boot-user-service-provider
dubbo.registry.address=192.168.93.101:2181
dubbo.registry.protocol=zookeeper
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.monitor.protocol=registry
注意:需要添加 dubbo的@Service 注解来暴露服务提供方的dubbo服务
import com.alibaba.dubbo.config.annotation.Service;
import com.dhu.bean.UserAddress;
import com.dhu.service.OrderService;
import com.dhu.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 1、将服务提供者注册到注册中心(暴露服务)
* 1)导入dubbo依赖
* 2)配置服务提供者
* 2、让服务消费者去注册中心订阅服务服务提供者的服务地址
* @author zhou
* @create 2020/5/22
*/
@Service //暴露服务
@Component
public class OrderServiceImpl implements OrderService {
@Autowired
private UserService userService;
5、springboot的启动类使用注解@EnableDubbo
/**
* 1.导入依赖
* 1)导入dubbo-starter
* 2)导入dubbo的其他依赖
* 2.
*/
@EnableDubbo //开启基于注解的dubbo功能
@SpringBootApplication
public class BootUserServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(BootUserServiceProviderApplication.class, args);
}
}
5、启动springboot主程序,同时启动dubbo管理管理控制台
6、配置服务的消费方
(1) application.properties
dubbo.application.name=boot-order-consumer
dubbo.registry.protocol=zookeeper
dubbo.registry.address=192.168.93.101:2181
dubbo.monitor.protocol=registry
(2)使用dubbo的@Reference注解,服务消费方会自动从注册中心发现服务,消费服务
@Service
public class OrderServiceImpl implements OrderService {
//@Autowired
@Reference //远程调用UserService服务
private UserService userService;
@Override
public List<UserAddress> initOrder(String userId) {
//1.查询用户的收获地址
List<UserAddress> list = userService.getUserAddressList(userId);
for (UserAddress userAddress : list) {
System.out.println(userAddress);
}
return list;
}
}
7、 编写消费方的Controller
@Controller
public class OrderController {
@Autowired
private OrderService orderService;
@RequestMapping("/initOrder")
@ResponseBody //以json的方式写出去,返回到页面
public List<UserAddress> initOrder(@RequestParam("uid") String userId) {
List<UserAddress> list = orderService.initOrder(userId);
return list;
}
}
8、由于监控中心端口为8080,所有需要修改消费方的tomcat默认端口号
·启动监控中心