一、创建服务提供者的SpringBoot项目
1、在Eclipse中new一个Spring Starter Project(Eclipse中创建SpringBoot的快捷方式,等价于idea中的Spring Initializr),无需添加模块
2、在pom.xml中添加gmall-api的基础依赖
<dependency>
<groupId>com.bdm.gmall</groupId>
<artifactId>gmall-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
3、实现UserService接口:和之前完全相同
二、创建服务消费者的SpringBoot项目
1、创建项目,添加web模块(消费者以web项目的方式承接前后台的交互)
2、在pom.xml中添加gmall-api的通用依赖
<dependency>
<groupId>com.bdm.gmall</groupId>
<artifactId>gmall-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
3、实现OrderService接口
4、在消费者项目中编写OrderController
@RestController
public class OrderController {
@Autowired
private OrderService orderService;
@RequestMapping("/initOrder")
public List<UserAddress> initOrder(@RequestParam("uId") String userId) {
return orderService.initOrder(userId);
}
}
这里将OrderService接口的定义和实现稍作了修改:
public interface OrderService {
public List<UserAddress> initOrder(String userId);
}
三、配置dubbo
1、服务提供者的dubbo配置
①导入dubbo-starter依赖,在导入该依赖后会为我们导入dubbo和操作zk的curator
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
②在application.properties文件中配置dubbo的相关属性(以dubbo开头的属性)
dubbo.application.name=user-service-provider
dubbo.registry.address=127.0.0.1:2181
dubbo.registry.protocol=zookeeper
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.monitor.protocol=registry
③暴露服务,在SpringBoot中暴露服务只需要给接口的实现类添加一个@Service注解(但该@Service注解是dubbo提供的而非Spring框架提供的),此时实现类上可能有两个@Service注解,但是这两个注解都是必须的,一个负责将类纳入到Spring的IOC管理,一个负责暴露dubbo服务
import org.springframework.stereotype.Service;
@Service
@com.alibaba.dubbo.config.annotation.Service
public class UserServiceImpl implements UserService {
public List<UserAddress> getUserAddressList(String userId) {
UserAddress address1 = new UserAddress(1, "北京市昌平区宏福科技园综合楼3层", "1", "李老师", "010-56253825", "Y");
UserAddress address2 = new UserAddress(2, "深圳市宝安区西部硅谷大厦B座3层(深圳分校)", "1", "王老师", "010-56253825", "N");
return Arrays.asList(address1, address2);
}
}
如果觉得dubbo的@Service注解太长了,可以将Spring框架提供的@Service注解替换为@Component,如下所示:此时@Component是由Spring提供的,而@Service是由dubbo提供的,同样这两个注解都是必须的
import org.springframework.stereotype.Component;
import com.alibaba.dubbo.config.annotation.Service;
@Component
@Service // 暴露dubbo服务
public class UserServiceImpl implements UserService {
public List<UserAddress> getUserAddressList(String userId) {
UserAddress address1 = new UserAddress(1, "北京市昌平区宏福科技园综合楼3层", "1", "李老师", "010-56253825", "Y");
UserAddress address2 = new UserAddress(2, "深圳市宝安区西部硅谷大厦B座3层(深圳分校)", "1", "王老师", "010-56253825", "N");
return Arrays.asList(address1, address2);
}
}
④在主配置类中添加@EnableDubbo开启基于注解的dubbo功能
@EnableDubbo
@SpringBootApplication
public class BootUserServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(BootUserServiceProviderApplication.class, args);
}
}
⑤运行main()启动项目,就可以在监控管理平台看到注册的服务:
2、、服务消费者的dubbo配置
①导入dubbo-starter依赖,在导入该依赖后会为我们导入dubbo和操作zk的curator
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
starter的版本适配:
②在application.properties文件中配置dubbo的相关属性(以dubbo开头的属性)
dubbo.application.name=boot-order-service-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.monitor.protocol=registry
③使用@Reference代替@Autowired注解,实现服务订阅:使用了@Reference注解后dubbo就会起作用而去注册中心寻找该接口的实现
@Service//是spring的@Service注解而非dubbo的
public class OrderServiceImpl implements OrderService {
//@Autowired
@Reference
UserService userService;
/**
* 初始化订单
*/
public List<UserAddress> initOrder(String userId) {
// 查询用户的收货地址,需要调用用户服务
return userService.getUserAddressList(userId);
}
}
④开启基于注解的dubbo功能:
@EnableDubbo
@SpringBootApplication
public class BootOrderServiceConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(BootOrderServiceConsumerApplication.class, args);
}
}
⑤由于服务消费者是一个web工程,需要修改下端口号避免端口冲突:
server.port=8081
⑥启动项目,在管理控制台可以看到多了一个消费者:
⑦访问:localhost:8081/initOrder?uId=1
总结
:四大步
1、导入dubbo的starter
2、配置dubbo的相关属性
3、服务的暴露(@Service)和消费(@Reference)
4、开启基于注解的dubbo功能(@EnableDubbo)
另外
:消费者最好在服务提供者启动之后启动,dubbo的管理控制台和监控中心可以在必要的时候启动,在启动这些项目的时候一定要先启动注册中心(如ZK)