Spring Boot 2 整合 Dubbo 框架 ,实现 RPC 服务远程调用

一、Dubbo框架简介

1、框架依赖

图例说明:

1)图中小方块 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代表层或模块,蓝色的表示与业务有交互,绿色的表示只对 Dubbo 内部交互。

2)图中背景方块 Consumer, Provider, Registry, Monitor 代表部署逻辑拓扑节点。

3)图中蓝色虚线为初始化时调用,红色虚线为运行时异步调用,红色实线为运行时同步调用。

4)图中只包含 RPC 的层,不包含 Remoting 的层,Remoting 整体都隐含在 Protocol 中。

2、核心角色说明

1)Provider 暴露服务的服务提供方

2)Consumer 调用远程服务的服务消费方(负载均衡)

3)Registry 服务注册与发现的注册中心(监控、心跳、踢出、重入)

4)Monitor 服务消费者和提供者在内存中累计调用次数和调用时间,主动定时每分钟发送一次统计数据到监控中心。

5)Container 服务运行容器:远程调用、序列化

二、与SpringBoot2.0整合

1、核心依赖

<!-- 这里包含了Zookeeper依赖和Dubbo依赖 -->
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.0</version>
</dependency>

2、项目结构说明

结构说明

dubbo-consume:服务消费方
dubbo-provider:服务提供方
dubbo-common:公共代码块,Dubbo接口,实体类

3、核心配置

1)提供方配置

server:
  tomcat:
    uri-encoding: UTF-8
    max-threads: 1000
    min-spare-threads: 30
  port: 7007
  connection-timeout: 5000ms
spring:
  application:
    name: block-dubbo-provider
# Dubbo 配置文件
dubbo:
  application:
    name: block-dubbo-provider
  registry:
    address: 127.0.0.1:2181
    protocol: zookeeper
  protocol:
    name: dubbo
    port: 20880
  scan:
    base-packages: com.boot.consume

2)消费方配置

server:
  tomcat:
    uri-encoding: UTF-8
    max-threads: 1000
    min-spare-threads: 30
  port: 7008
  connection-timeout: 5000ms

spring:
  application:
    name: block-dubbo-consume
# Dubbo 配置文件
dubbo:
  application:
    name: block-dubbo-consume
  registry:
    address: 127.0.0.1:2181
    protocol: zookeeper

三、演示案例

1、服务远程调用

1)提供方服务接口

  • 注意这里的注解
  • com.alibaba.dubbo.config.annotation.Service
@Service
@Component
public class DubboServiceImpl implements DubboService {
    private static Logger LOGGER = LoggerFactory.getLogger(DubboServiceImpl.class) ;
    @Override
    public String getInfo(String param) {
        LOGGER.info("字符参数:{}",param);
        return "[Hello,Cicada]";
    }
    @Override
    public UserEntity getUserInfo(UserEntity userEntity) {
        LOGGER.info("实体类参数:{}",userEntity);
        return userEntity;
    }
}

2)消费方接口

  • 注意这里注解
  • com.alibaba.dubbo.config.annotation.Reference
  • org.springframework.stereotype.Service
@Service
public class ConsumeService implements DubboService {
    @Reference
    private DubboService dubboService ;
    @Override
    public String getInfo(String param) {
        return dubboService.getInfo(param);
    }
    @Override
    public UserEntity getUserInfo(UserEntity userEntity) {
        return dubboService.getUserInfo(userEntity);
    }
}

2、接口超时配置

该配置可以在服务提供方配置,也可以在服务消费方配置,这里演示在提供方的配置。

注解:timeout

1)服务接口注解

@Service(timeout = 2000)
@Component
public class DubboServiceImpl implements DubboService {
}

2)消费方调用

@Override
 public String timeOut(Integer time) {
     return dubboService.timeOut(time);
 }

3)测试接口

服务超时抛出异常

com.alibaba.dubbo.remoting.TimeoutException

3、接口多版本配置

1)服务提供方

相同接口提供两个版本实现。注解:version。

版本一:

@Service(version = "1.0.0")
@Component
public class VersionOneImpl implements VersionService {
    @Override
    public String getVersion() {
        return "{当前版本:1.0.0}";
    }
}

版本二:

@Service(version = "2.0.0")
@Component
public class VersionTwoImpl implements VersionService {
    @Override
    public String getVersion() {
        return "{当前版本:2.0.0}";
    }
}

2)消费方调用

通过@Reference(version)注解,将指向不同版本的接口实现。

@Service
public class VersionServiceImpl implements VersionService {
    @Reference(version = "1.0.0")
    private VersionService versionService1 ;
    @Reference(version = "2.0.0")
    private VersionService versionService2 ;
    @Override
    public String getVersion() {
        return versionService1.getVersion();
    }
    public String version2 (){
        return versionService2.getVersion() ;
    }
}

以上案例都是参照Dubbo官网的流程编写的,Dubbo许多强大功能都可以参考官网一步步的配置。

原文地址:https://www.cnblogs.com/AIPAOJIAO/p/11951564.html

时间: 2024-09-29 11:15:48

Spring Boot 2 整合 Dubbo 框架 ,实现 RPC 服务远程调用的相关文章

Spring Boot:整合MyBatis框架

综合概述 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型.接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录.MyBatis是一款半ORM框架,相对于Hibernate这样的完全ORM框架,MyBatis显得更加灵活,因为可以直接控制SQL语句,所

Spring Boot:整合Spring Security

综合概述 Spring Security 是 Spring 社区的一个顶级项目,也是 Spring Boot 官方推荐使用的安全框架.除了常规的认证(Authentication)和授权(Authorization)之外,Spring Security还提供了诸如ACLs,LDAP,JAAS,CAS等高级特性以满足复杂场景下的安全需求.另外,就目前而言,Spring Security和Shiro也是当前广大应用使用比较广泛的两个安全框架. Spring Security 应用级别的安全主要包含两

Rabbit MQ和Spring Boot的整合

消息服务 背景:有时需与其它系统集成来完成相关业务功能,原始的做法是程序内部相互调用,除此之外,还可用消息服务中间件来进行业务处理,使用消息服务中间件处理业务能够提升系统的异步通信和扩展解耦的能力,个人有点面向切面的意思. 一.为什么要使用消息服务? 因为它有很多好处,能解决很多问题: 1.异步处理 2.流量消峰 3.提高效率和可靠性 二.RabbitMQ消息中间件的原理和工作模式 RabbitMQ消息中间件的原理: 1.消息发布者P向RabbitMQ代理(Broker)指定虚拟主机服务器发送消

Spring Boot 应用系列 5 -- Spring Boot 2 整合logback

上一篇我们梳理了Spring Boot 2 整合log4j2的配置过程,其中讲到了Spring Boot 2原装适配logback,并且在非异步环境下logback和log4j2的性能差别不大,所以对于那些日志量不算太高的项目来说,选择logback更简单方便. 1. pom.xml pom.xml不需要添加任何依赖. 2. logback的配置文件 系统启动时,logback按照下列顺序加载第一个找到的配置文件: (1) classpath: logback-test.xml (2) clas

Spring Boot:整合Swagger在线文档

综合概述 spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于移动端.在实际开发过程中,这些接口还要提供给开发测试进行相关的白盒测试,那么势必存在如何在多人协作中共享和及时更新API开发接口文档的问题. 假如你已经对传统的wiki文档共享方式所带来的弊端深恶痛绝,那么尝试一下Swagger2 方式,一定会让你有不一样的开发体验. 使用 Swagger 集成文档

spring boot 资料整合

spring boot 资料整合 原文地址:https://www.cnblogs.com/lhuser/p/11087410.html

[转载] 基于Dubbo框架构建分布式服务

转载自http://shiyanjun.cn/archives/1075.html Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配置就能够实现分布式服务调用,也就是说服务提供方(Provider)发布的服务可以天然就是集群服务,比如,在实时性要求很高的应用场景下,可能希望来自消费方(Consumer)的调用响应时间最短,只需要选择Dubbo的F

基于Dubbo框架构建分布式服务

Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配置就能够实现分布式服务调用,也就是说服务提供方(Provider)发布的服务可以天然就是集群服务,比如,在实时性要求很高的应用场景下,可能希望来自消费方(Consumer)的调用响应时间最短,只需要选择Dubbo的Forking Cluster模式配置,就可以对一个调用请求并行发送到多台对等的提供方

Spring Boot构建的Web项目如何在服务端校验表单输入

本文首发于个人网站:Spring Boot构建的Web项目如何在服务端校验表单输入 这个例子用于演示在Spring Boot应用中如何验证Web 应用的输入,我们将会建立一个简单的Spring MVC应用,来读取用户输入并使用validation注解来检查,并且当用户输入错误时,应用需要再屏幕上显示错误信息提示用户重新输入. 首先构建Maven项目,该项目的pom文件内容如下: <?xml version="1.0" encoding="UTF-8"?>