springboot分布式整合dubbo的方式

 更新时间:2021年11月29日 10:45:44   作者:孤依寒  
Dubbo是一款高性能、轻量级的开源Java RPC框架,本文通过实例代码给大家介绍springboot分布式整合dubbo的方式,感兴趣的朋友跟随小编一起看看吧

 Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。

1.服务提供者配置

//需要额外引入的jar包  提供者      
<dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>

        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

spring配置方式

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://code.alibabatech.com/schema/dubbo
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

<dubbo:application name="user-service-provider"></dubbo:application>
    <!-- 指定注册中心的地址,将来服务提供者要向注册中心进行注册-->
    <dubbo:registry address="zookeeper://192.168.192.3:2181"></dubbo:registry>
    <!-- 指定将来服务消费者消费我的时候使用的rpc协议 -->
    <dubbo:protocol name="dubbo" port="11123"></dubbo:protocol>
    <!-- 服务发布 -->
    <bean id="userService" class="com.oracle.shop.user.service.impl.UserServiceImpl"></bean>
    <dubbo:service interface="com.oracle.shop.user.service.UserService" ref="userService"></dubbo:service>

</beans>

springboot配置方式

#dubbo的配置
#服务名
dubbo.application.name=user-provider
#注册中心地址
dubbo.registry.address=zookeeper://192.168.192.3:2181
#使用的协议以及端口号
dubbo.protocol.name=dubbo
dubbo.protocol.port=11111

发布服务的方式

在相应的实现类上添加注解

import com.alibaba.dubbo.config.annotation.Service;
import com.oracle.shopping.user.mapper.MenuMapper;
import com.oracle.shopping.user.po.Menu;
import com.oracle.shopping.user.service.MenuService;
import javax.annotation.Resource;
@Service  //dubbo的注解表示发布该类
@org.springframework.stereotype.Service//spring的注解表示会在启动时实例化该类
public class MenuServiceImpl implements MenuService {

    @Resource
    private MenuMapper menuMapper;

    @Override
    public int deleteByPrimaryKey(String id) {
        return menuMapper.deleteByPrimaryKey(id);
    }

    @Override
    public int insert(Menu record) {
        return menuMapper.insert(record);
    }

    @Override
    public int insertSelective(Menu record) {
        return menuMapper.insertSelective(record);
    }

    @Override
    public Menu selectByPrimaryKey(String id) {
        return menuMapper.selectByPrimaryKey(id);
    }

    @Override
    public int updateByPrimaryKeySelective(Menu record) {
        return menuMapper.updateByPrimaryKeySelective(record);
    }

    @Override
    public int updateByPrimaryKey(Menu record) {
        return menuMapper.updateByPrimaryKey(record);
    }

}

启动类中添加dubbo的扫包器,设置扫描路径

@SpringBootApplication
@MapperScan("com.oracle.shopping.user.mapper")
@EnableTransactionManagement
@DubboComponentScan("com.oracle.shopping.user.service.impl")
public class UserProviderApp {

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

2.服务消费者订阅

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

        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

spring配置方式

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://code.alibabatech.com/schema/dubbo
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

<dubbo:application name="user-web-consumer"></dubbo:application>
    <!-- 指定注册中心的地址,将来服务提供者要向注册中心进行注册-->
    <dubbo:registry address="zookeeper://192.168.192.3:2181"></dubbo:registry>
    <!-- 订阅具体服务,让dubbo帮咱们生成动态代理客户端对象-->
    <dubbo:reference interface="com.oracle.shop.user.service.UserService" id="userService"></dubbo:reference>
    <dubbo:reference interface="com.oracle.shop.order.service.OrderService" id="orderService"></dubbo:reference>

</beans>

在controller中进行依赖注入和调用

@Controller
@RequestMapping("/user")
public class UserController {
    //通过动态代理的方式生成的动态代理类
    @Autowired(required = false)
    private UserService userService;
    //不进行检查,防止报错无法运行
    @Autowired(required = false)
    private OrderService orderService;


    @RequestMapping("/a")
    public @ResponseBody
    User detail(){
     return userService.findUserById(1);
    }

    @RequestMapping("/b")
    public @ResponseBody
    Orders details(){
        return orderService.findUserById(1);
    }

}

springboot配置方式

#指定自己的名称
dubbo.application.name=user-consumer
#指定注册中心的地址
dubbo.registry.address=zookeeper://192.168.192.3:2181

​在controller当中使用注解声明要使用的服务(实现类)

@RestController
@RequestMapping("/user")
public class UserController {

    //表示要使用的服务
    @Reference(interfaceName = "com.oracle.shopping.user.service.UserService")
    private UserService userService;

    @Autowired
    private RedisTemplate redisTemplate;


    @RequestMapping("/detail")
    public User detail(String id){
        return userService.selectByPrimaryKey(id);
    }
}

启动类中设置dobbo注解的扫描路径

@SpringBootApplication
@DubboComponentScan("com.oracle.shopping.user.controller")
public class UserConsumerApp {

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

到此这篇关于springboot(分布式)整合dubbo的文章就介绍到这了,更多相关springboot整合dubbo内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java ImmutableMap的使用说明

    java ImmutableMap的使用说明

    这篇文章主要介绍了java ImmutableMap的使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 一篇文章带你搞定SpringBoot中的热部署devtools方法

    一篇文章带你搞定SpringBoot中的热部署devtools方法

    这篇文章主要介绍了一篇文章带你搞定SpringBoot中的热部署devtools方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Java面向对象特性深入刨析封装

    Java面向对象特性深入刨析封装

    封装是一个非常广泛的概念,小到一个属性的封装,大到一个框架或者一个项目的封装,下面这篇文章主要给大家介绍了关于java中封装的那点事,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • Java之SpringBean生命周期问题理解

    Java之SpringBean生命周期问题理解

    这篇文章主要介绍了Java之SpringBean生命周期问题理解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • springboot使用redisTemplate操作lua脚本

    springboot使用redisTemplate操作lua脚本

    本文主要介绍了springboot使用redisTemplate操作lua脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 详解SpringBoot如何自定义一个Starter

    详解SpringBoot如何自定义一个Starter

    小伙伴们曾经可能都经历过整天写着CURD的业务,都没写过一些组件相关的东西,这篇文章记录一下SpringBoot如何自定义一个Starter。原理和理论就不用多说了,可以在网上找到很多关于该方面的资料,这里主要分享如何自定义
    2022-11-11
  • Scala方法与函数使用和定义详解

    Scala方法与函数使用和定义详解

    这个章节会很烧脑,需要认真研读,我会尽量写的详细一些。 方法和函数,看似是两个概念,其实他严格来说也是两个概念,但我们大可以理解成是同一个概念,在使用时只有语法上的细微差别,是很类似的,都理解为function即可
    2022-12-12
  • Java实现软件运行时启动信息窗口的方法

    Java实现软件运行时启动信息窗口的方法

    这篇文章主要介绍了Java实现软件运行时启动信息窗口的方法,比较实用的功能,需要的朋友可以参考下
    2014-08-08
  • Spring Boot 整合JPA 数据模型关联使用操作(一对一、一对多、多对多)

    Spring Boot 整合JPA 数据模型关联使用操作(一对一、一对多、多对多)

    这篇文章主要介绍了Spring Boot 整合JPA 数据模型关联操作(一对一、一对多、多对多),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Mac安装多个JDK并实现动态切换

    Mac安装多个JDK并实现动态切换

    有时候我们有多个项目需要使用多个版本JDK,本文主要介绍了Mac安装多个JDK并实现动态切换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07

最新评论