目前的dubbo支持springboot集成还是之前的例子,这次我们通过springboot容器来实现。借此了解一下基于springboot容器启动dubbo配置使用

1. 准备工作

创建一个Maven空项目,作为项目的父工程,此工程子项目基于Spring Boot 2.0.5 实现

全网最透彻!Dubbo整合SpringBoot详解,又通宵了

在父工程pom.xml引入之后要创建的子工程

    <modules>
        <module>gmall-interface</module>
        <module>user-service-provider</module>
        <module>order-service-consumer</module>
    </modules>

可以提前看一下工程结构

全网最透彻!Dubbo整合SpringBoot详解,又通宵了

下面分别来实现工程:(子工程实现方式都是在gmall工程新建Module

全网最透彻!Dubbo整合SpringBoot详解,又通宵了

2. 公共API

项目中共用的接口和POJO类,代码和之前一样,这里不再展开

全网最透彻!Dubbo整合SpringBoot详解,又通宵了

3. 服务提供者

工程结构如下

全网最透彻!Dubbo整合SpringBoot详解,又通宵了

引入依赖

<!-- 引入公共API,以实现接口 -->
        <dependency>
            <groupId>com.zang</groupId>
            <artifactId>gmall-interface</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- 引入spring-boot-starter以及dubbocurator的依赖 -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
        <!-- Spring Boot相关依赖 -->
        <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>

需要注意的是,根据jdk和Spring Boot版本不同dubbospringboot-starter版本需要有根据的选择

全网最透彻!Dubbo整合SpringBoot详解,又通宵了

dubbo提供了@Service注解,可将类声明为提供方,省去了大量配置的麻烦

import com.alibaba.dubbo.config.annotation.Service;
import com.zang.gmall.bean.UserAddress;
import com.zang.gmall.service.UserService;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.List;

@Service   //属于Dubbo的@Service注解,非Spring  作用暴露服务
@Component
public class UserServiceImpl implements UserService {

    @Override
    public List<UserAddress> getUserAddressList(String userId) {
    //省略
}}

通过属性配置方式设置application.properties

#当前服务/应用名字
dubbo.application.name=user-service-provider

#注册中心协议地址
dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181

#通信规则通信协议接口)
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

#连接监控中心
dubbo.monitor.protocol=registry
#开启扫描,可替代 @EnableDubbo 注解
##dubbo.scan.base-packages=com.zang.gmall

springboot容器根据配置启动服务提供方,这里需要添加 @EnableDubbo 注解

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

// 开启基于注解的dubbo功能(主要是包扫描@DubboComponentScan)
// 也可以配置文件使用dubbo.scan.base-package来替代   @EnableDubbo
@EnableDubbo

@SpringBootApplication
public class UserServiceProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserServiceProviderApplication.class, args);
    }
}

提供方顺利启动

全网最透彻!Dubbo整合SpringBoot详解,又通宵了

4. 服务消费者

消费者工程在初始化设置web项目结构如下

全网最透彻!Dubbo整合SpringBoot详解,又通宵了

引入服务提供方同样的依赖,除此之外,添加springboot web模块的依赖。

    <!-- springboot web模块 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

dubbo提供了@Reference注解,可替换@Autowired注解,用于引入远程服务

import com.alibaba.dubbo.config.annotation.Reference;
import com.zang.gmall.bean.UserAddress;
import com.zang.gmall.service.OrderService;
import com.zang.gmall.service.UserService;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class OrderServiceImpl implements OrderService {

    @Reference
    UserService userService;

    @Override
    public List<UserAddress> initOrder(String userId) {
  //代码省略
   }
}

配置文件application.properties

#避免和监控中心端口冲突,设为8081端口访问
server.port=8081  

dubbo.application.name=order-service-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.monitor.protocol=registry

启动类同样加上@EnableDubbo注解

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@EnableDubbo
@SpringBootApplication
public class OrderServiceConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderServiceConsumerApplication.class, args);
    }
}

查看调用是否成功,新增控制用于访问

import com.zang.gmall.bean.UserAddress;
import com.zang.gmall.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class OrderController {

    @Autowired
    OrderService orderService;

    @ResponseBody   //以json格式返回
    @RequestMapping("/initOrder")
    public List<UserAddress> initOrder(@RequestParam("uid") String userId){

       return orderService.initOrder(userId);
    }

}

5. 测试调用

启动消费方,在浏览器访问

全网最透彻!Dubbo整合SpringBoot详解,又通宵了

调用成功

全网最透彻!Dubbo整合SpringBoot详解,又通宵了

附:springboot也允许引用xml文件配置方法是在启动类中加入如下注解

//@EnableDubbo
//引入配置信息
@ImportResource(locations="classpath:provider.xml")
@SpringBootApplication
public class UserServiceProviderApplication {
//略
}

原文地址:https://blog.csdn.net/m0_67402235/article/details/126565027

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_36438.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注