dubbo实战02-springboot整合dubbo

  • 准备工作
在准备整合springboot与dubbo之前,我们需要做好以下的准备工作:
1、选定整合的springboot、dubbo版本
2、选定zookeeper的版本

不同的版本springboot版本对应不同的dubbo版本,具体的详见版本配置规则

  • 工程架构
dubbo-springboot
	|dubbo-springboot-api
		|src
			|main
				java
					|com.kkcl.dubbo.springboot.api
						|bean 
							|UserAddress.java
						|service
							|UserService.java
							|OrderService.java
	|dubbo-springboot-provider
		|main
			|java
				|com.kkcl.dubbo.springboot.provider
					|service.impl
						|UserServiceImpl.java
					|DubboSpringbootProviderApplication.java
			|resources
				|application.properties
	|dubbo-springboot-consumer
	|main
			|java
				|com.kkcl.dubbo.springboot.consumer
					|controller
						| OrderController.java
					|service.impl
						|OrderServiceImpl.java
					|DubboSpringbootConsumerApplication.java
			|resources
				|application.properties
  • 相关依赖
dubbo-springboot中的pom.xml
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <modules>
        <module>dubbo-springboot-api</module>
        <module>dubbo-springboot-provider</module>
        <module>dubbo-springboot-consumer</module>
    </modules>

dubbo-springboot-provider中的pom.xml
 <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-test</artifactId>
       <scope>test</scope>
      </dependency>
 </dependencies>
 
dubbo-springboot-consumer中的pom.xml
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.kkcl</groupId>
            <artifactId>dubbo-springboot-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
 </dependencies>	
  • 主要代码
UserAddress.java
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-否
	.......
	gettter and setter
	}

UserService.java
	public interface UserService 
	public List<UserAddress> getUserAddressList(String userId);
}

public interface OrderService {
	public List<UserAddress> initOrder(String userId);
}

@Service   //暴露服务
@Component
public class UserServiceImpl implements UserService {
    @Override
    public List<UserAddress> getUserAddressList(String userId) {
        UserAddress address1 = new UserAddress(1, "北京市", "1", "李老师", "010-56253823", "Y");
        UserAddress address2 = new UserAddress(2, "西安市", "1", "王老师", "010-56253812", "N");
        return Arrays.asList(address1,address2);
    }
}

@Service
public class OrderServiceImpl implements OrderService {
    //@Autowired
    @Reference // dubbo远程调用自动发现
    private UserService userService;

    @Override
    public List<UserAddress> initOrder(String userId) {
        System.out.println("用户Id:"+userId);
        List<UserAddress> addressList = userService.getUserAddressList(userId);
        return addressList;
    }
}

provider中的配置文件
#服务名称
dubbo.application.name=dubbo-springboot-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

consumer中的配置文件
server.port=8081
#服务名称
dubbo.application.name=dubbo-springboot-consumer
#注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#监控中心自动发现
dubbo.monitor.protocol=registry

OrderController.java
@Controller
public class OrderController {
    @Autowired
    private OrderService orderService;
    @ResponseBody
    @RequestMapping("/initOrder")
    public List<UserAddress> initOrder(@RequestParam("uid") String userId){
        return orderService.initOrder(userId);
    }
}
  • 注意要点
1、怎么开启dubbo
2、服务提供方怎么暴露服务
3、服务消费方怎么调用服务
针对1:需要在主启动类中添加注解@EnableDubbo来开启dubbo微服务
针对2:在服务的提供服务时须在服务的实现类中添加dubbo的注解@Service和@Component
针对3:在服务的消费方调用相关服务提供方的服务时添加@Reference注解来远程调用
  • 检验效果
1、启动zookeeper
2、启动服务提供方的类启动类
3、启动服务消费方的主启动类
4、在浏览器地址栏输入:http://localhost:8081/initOrder?uid=1观察结果是否调用成功
  • 源码地址
https://github.com/kkcl/kkcl-learning-example/tree/master/dubbo-springboot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值