Dubbo——整合SpringBoot

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rubulai/article/details/84143659

一、创建服务提供者的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)

猜你喜欢

转载自blog.csdn.net/rubulai/article/details/84143659