Springboot整合Dubbo

7 篇文章 0 订阅
7 篇文章 0 订阅


github源码地址: https://github.com/LuckyShawn/springboot-dubbo

1. 安装zookeeper (windows版)

  1. 下载zookeeper 网址 https://archive.apache.org/dist/zookeeper/zookeeper-3.4.13/

  2. 解压后进入conf,将zoo_sample.cfg复制一份改名为zoo.cfg
    配置中注意的参数:
    dataDir=./ 临时数据存储的目录(可写相对路径)
    clientPort=2181 zookeeper的端口号

  3. 返回bin目录,启动zookeeper:运行zkServer.cmd

  4. 运行 zkCli.cmd 测试
    在这里插入图片描述

2.安装dubbo-admin管理控制台(windows版)

dubbo本身并不是一个服务软件。它其实就是一个jar包能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。所以你不用在Linux上启动什么dubbo服务。
但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序,不过这个监控即使不装也不影响使用。

  1. 下载dubbo-admin https://github.com/apache/incubator-dubbo-ops
    整个工程下下来
    在这里插入图片描述
  2. 修改 src\main\resources\application.properties 指定zookeeper地址
    在这里插入图片描述
  3. 打包dubbo-admin mvn clean package -Dmaven.test.skip=true
    在这里插入图片描述
    target中找到dubbo-admin-0.0.1-SNAPSHOT,cmd进去命令行 输入java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
    在这里插入图片描述

访问:http://localhost:7001/ 看到如下界面
默认帐号密码是root

在这里插入图片描述

3. 创建父工程和共用基础mall-api:

模拟需求:订单服务web模块在A服务器,用户服务模块在B服务器,A可以远程调用B的功能。

模块功能
订单服务web模块创建订单等
用户服务service模块查询用户地址等
  1. 创建父工程Maven项目,springboot-dubbo,此工程是为了管理统一的pom文件
  2. 右键新建module创建maven项目:mall-api
    在这里插入图片描述
    此模块包含共用的基础bean和service,代码如下:

bean:

package com.shawn.bean;
/**
 * 用户地址
 */
public class UserAddress implements Serializable {
	
	private Integer id;
    private String userAddress; //用户地址
    private String userId; //用户id
    private String consignee; //收货人
    private String phoneNum; //电话号码
    private String isDefault; //是否为默认地址 Y-是 N-否
    
    public UserAddress() {
		super();
		// TODO Auto-generated constructor stub
	}
    
	public UserAddress(Integer id, String userAddress, String userId, String consignee, String phoneNum,
			String isDefault) {
		super();
		this.id = id;
		this.userAddress = userAddress;
		this.userId = userId;
		this.consignee = consignee;
		this.phoneNum = phoneNum;
		this.isDefault = isDefault;
	}
	
	//省略了get set toString 方法
}

service:

/**
 * 用户服务
 */
public interface UserService {
	/**
	 * 按照用户id返回所有的收货地址
	 * @param userId
	 * @return
	 */
	public List<UserAddress> getUserAddressList(String userId);
}
package com.shawn.service;
public interface OrderService {
	/**
	 * 初始化订单
	 * @param userId
	 */
	public List<UserAddress> initOrder(String userId);

}

4.创建模块 mall-user-service-provider 服务提供者

  1. 在这里插入图片描述
    直接下一步下一步创建完成。

  2. 引入需要的依赖

	<dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
	</dependency>
	<dependency>
            <groupId>com.shawn</groupId>
            <artifactId>mall-api</artifactId>
            <version>1.0-SNAPSHOT</version>
	</dependency>
  1. 配置文件application.properties
dubbo.application.name=mall-user-service-provider
dubbo.registry.address=127.0.0.1:2181
dubbo.registry.protocol=zookeeper

dubbo.protocol.name=dubbo
dubbo.protocol.port=20881

dubbo.monitor.protocol=registry
dubbo.scan.base-packages=com.shawn.malluserserviceprovider
  1. 暴露服务的实现类
package com.shawn.malluserserviceprovider.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
@Service 	//暴露服务 为dubbo的service
@Component
public class UserServiceImpl implements UserService {
	@Override
	public List<UserAddress> getUserAddressList(String userId) {
		System.out.println("UserServiceImpl.....");
		// TODO Auto-generated method stub
		UserAddress address1 = new UserAddress(1, "深圳市龙岗区", "1", "shawn", "888888", "Y");
		UserAddress address2 = new UserAddress(2, "深圳市宝安区", "1", "jack", "999999", "N");
		return Arrays.asList(address1,address2);
	}

}

5. 创建模块 mall-order-service-consumer 服务消费者

  1. 同5步骤 下一步…直接创建
  2. 引入依赖
	<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
    </dependency>
    <dependency>
            <groupId>com.shawn</groupId>
            <artifactId>mall-api</artifactId>
            <version>1.0-SNAPSHOT</version>
    </dependency>
  1. 配置文件 application.properties
server.port=8081

dubbo.application.name=mall-order-service-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.monitor.protocol=registry
  1. 订单服务消费接口实现类
package com.shawn.mallorderserviceconsumer.service.impl;
/**
 * 1、将服务提供者注册到注册中心(暴露服务)
 * 		1)、导入dubbo依赖(2.6.2)\操作zookeeper的客户端(curator)
 * 		2)、配置服务提供者
 * 2、让服务消费者去注册中心订阅服务提供者的服务地址
 */
@Service
public class OrderServiceImpl implements OrderService {

	@Reference	//使用dubbo提供的reference注解引用远程服务
	UserService userService;
	@Override
	public List<UserAddress> initOrder(String userId) {
		System.out.println("用户id:"+userId);
		//1、查询用户的收货地址
		List<UserAddress> addressList = userService.getUserAddressList(userId);
		for (UserAddress userAddress : addressList) {
			System.out.println(userAddress.getUserAddress());
		}
		return addressList;
	}

}

  1. controller
package com.shawn.mallorderserviceconsumer.controller;
/**
 1. @Description TODO
 2. @Author shawn
 */
@RestController
public class OrderController {
    @Autowired
    OrderService orderService;
    @RequestMapping("/initOrder")
    public List<UserAddress> initOrder(@RequestParam("uid") String userId){
        return orderService.initOrder(userId);
    }
}

6. 测试

  1. 分别启动服务提供者MallUserServiceProviderApplication,服务消费者MallOrderServiceConsumerApplication
  2. 访问:http://localhost:7001/
  3. 在这里插入图片描述
  4. 在这里插入图片描述
  5. 访问http://localhost:8081/initOrder?uid=1

返回结果

[
    {
        "id": 1,
        "userAddress": "深圳市龙岗区",
        "userId": "1",
        "consignee": "shawn",
        "phoneNum": "888888",
        "isDefault": "Y"
    },
    {
        "id": 2,
        "userAddress": "深圳市宝安区",
        "userId": "1",
        "consignee": "jack",
        "phoneNum": "999999",
        "isDefault": "N"
    }
]

至此,整合完成。
官方文档地址:http://dubbo.apache.org/zh-cn/docs/user/quick-start.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值