Dubbo高手之路3,Dubbo服务消费详解

在这里插入图片描述

目录

  • 引言
    • 1. 介绍 Dubbo 服务消费的详解的目的和背景
    • 2. 概述 Dubbo 服务消费的过程和核心概念
  • 一、Dubbo 服务消费的基础知识
    • 1. Dubbo 服务消费的架构和流程
    • 2. Dubbo 服务消费的基本配置和使用方法
  • 二、Dubbo 服务消费的注册与发现
    • 1. Dubbo 服务消费的注册中心和发布中心的基本概念和特点
      • 1.1 服务消费的注册中心:
      • 1.2服务发布的中心:
    • 2. Dubbo 服务消费的注册与发现的工作原理和流程
    • 3. Dubbo 服务消费的注册与发现的配置和使用
      • 3.1 配置 Zookeeper
      • 3.2 配置服务提供者
      • 3.3 配置服务消费者
      • 3.4 启动服务消费者和服务提供者
      • 3.5 测试服务消费
  • 三、Dubbo 服务消费的消息代理
    • 1. Dubbo 服务消费的消息代理的基本概念和特点
    • 2. Dubbo 服务消费的消息代理的工作原理和流程
    • 3. Dubbo 服务消费的消息代理的配置和使用
      • 3.1 创建消息代理配置类
      • 3.2 添加 @EnableMessageProxy 注解
      • 3. 3 添加消息代理的配置信息
      • 3.4 启动 Dubbo 消息代理服务
  • 四、Dubbo 服务消费的负载均衡
    • 1. Dubbo 服务消费的负载均衡的基本概念和特点
      • 1.1 特点:
      • 1.2 基本概念:
    • 2. Dubbo 服务消费的负载均衡的工作原理和流程
    • 3. Dubbo 服务消费的负载均衡的配置和使用
      • 3.1 配置方式
      • 3.2注解方式
  • 五、Dubbo 服务消费的安全控制
    • 1. Dubbo 服务消费的安全控制的基本概念和特点
      • 1.1 基本概念
      • 1.2 特点
    • 2. Dubbo 服务消费的安全控制的流程和配置方法
    • 3. Dubbo 服务消费的负载均衡的配置和使用
      • 3.1 配置方式
      • 3.2 注解方式
    • 3. Dubbo 服务消费的加密和认证技术的使用
      • 3.1 加密技术
      • 3.2 认证技术

大家好,我是哪吒。

引言

Dubbo 是一款开源的分布式服务框架,它为分布式系统的开发和部署提供了便捷的方式。在 Dubbo 中,服务消费是非常重要的一部分,它是 Dubbo 服务分布式架构的重要组成部分。本文将详细介绍 Dubbo 服务消费的详解,包括 Dubbo 服务消费的基础知识、注册与发现、消息代理、负载均衡、安全控制、监控和日志等方面的内容。

1. 介绍 Dubbo 服务消费的详解的目的和背景

Dubbo 服务消费是 Dubbo 服务分布式架构的重要组成部分,它主要负责服务的消费和调用。在 Dubbo 中,服务消费是通过注册中心和发布中心来实现的。注册中心负责服务的注册和发现,发布中心负责服务的发布和广播。Dubbo 服务消费提供了多种消息代理技术,如 Apache Kafka、RabbitMQ 等,可以支持大规模的分布式系统的高效消费和发布。

Dubbo 服务消费的详解的目的是为了帮助开发者更深入地了解 Dubbo 服务消费的工作原理和配置方法,以及掌握 Dubbo 服务消费的核心概念和技术,从而更好地使用 Dubbo 框架来构建分布式系统。同时,随着分布式系统的开发和部署的不断普及,了解 Dubbo 服务消费也是开发者必备的技能之一。

2. 概述 Dubbo 服务消费的过程和核心概念

Dubbo 服务消费的过程可以概括为以下几个步骤:

在这里插入图片描述

上图描述了Dubbo服务消费的过程,其中:

  1. 服务消费方(ServiceConsumer)调用Dubbo代理(DubboProxy)请求服务。
  2. Dubbo代理根据负载均衡策略选择一个可用的服务提供方(通过LoadBalance组件选择)。
  3. Dubbo代理通过Directory组件获取可用的服务提供方列表,其中Directory组件会先查询Registry组件获取服务提供方列表,然后缓存起来以备后续使用。
  4. LoadBalance组件选择一个可用的服务提供方,通过Invoker组件发起服务调用请求。
  5. ClusterInvoker组件会对请求进行一些处理(如容错、路由等),然后将请求转发给具体的Invoker组件执行服务调用。
  6. Invoker组件收到请求后,执行具体的服务调用操作,并将结果返回给Dubbo代理。
  7. Dubbo代理将结果返回给服务消费方。

在整个过程中,Dubbo通过Registry、Directory、LoadBalance、Invoker等组件实现了服务的注册、发现、负载均衡、调用等功能,提供了完整的分布式服务治理方案。

在这里插入图片描述

在 Dubbo 服务消费中,核心概念主要包括:

  1. 服务消费者:使用Dubbo框架调用服务的应用程序。
  2. 服务提供者列表:Dubbo注册中心注册的可用服务提供者列表,服务消费者通过负载均衡选择其中一个服务提供者调用。
  3. 注册中心:服务提供者将自己注册到注册中心,服务消费者通过注册中心获得可用服务提供者列表。
  4. 负载均衡:在服务提供者列表中选择一个服务提供者,用于负责处理服务调用。
  5. 服务代理:Dubbo消息代理将服务请求转发给服务提供者。
  6. 超时与重试:在特定的时间内等待服务提供者返回结果,如果等待时间超过指定的时间,则将重试服务提供者列表中的其他服务提供者。
  7. 熔断:Dubbo在一段时间内检查服务提供者的状态,如果服务提供者的调用失败率超过阈值,则断开对该服务提供者的调用。
  8. 降级:当服务提供者无法正常提供服务时,Dubbo会将服务降级为备用服务,保证服务可用性。

一、Dubbo 服务消费的基础知识

1. Dubbo 服务消费的架构和流程

在这里插入图片描述

  1. 消费方向注册中心查询所需服务;
  2. 注册中心返回可用服务列表;
  3. 消费方向其中一台服务提供方发起请求;
  4. 服务提供方返回响应;
  5. 消费方向另一台服务提供方发起请求;
  6. 服务提供方返回响应。

以上是Dubbo服务消费的架构和流程,其中消费方向注册中心查询可用服务,然后向其中一台服务提供方发起请求,收到响应后再向另一台服务提供方发起请求并接收响应。

2. Dubbo 服务消费的基本配置和使用方法

Dubbo服务消费的基本配置和使用方法需要以下步骤:

  1. 在pom.xml文件中添加Dubbo依赖:
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>x.x.x</version>
</dependency>
  1. 在消费端配置文件中配置Dubbo服务消费者:
<dubbo:application name="consumer" />

<dubbo:registry address="zookeeper://localhost:2181" />

<dubbo:consumer check="false" />

<dubbo:reference id="userService" interface="com.xxx.UserService" />
  1. 在代码中使用Dubbo服务消费者调用服务:
public class UserController {
    @Autowired
    private UserService userService;

    public User getUserById(Long id) {
        return userService.getUserById(id);
    }
}
  1. 启动服务消费者,调用服务。

二、Dubbo 服务消费的注册与发现

1. Dubbo 服务消费的注册中心和发布中心的基本概念和特点

1.1 服务消费的注册中心:

服务消费的注册中心是负责服务消费方 (即客户端) 注册和发现的组件。当服务消费方需要调用服务时,它会首先向注册中心发送注册请求,注册中心会记录下该客户端的注册信息,包括客户端的 IP 地址、端口号、客户端认证信息等。当服务需要被消费时,注册中心会根据客户端的注册信息,自动查找可用的服务实例,并将调用请求发送给服务实例。

服务消费的注册中心通常使用一些开源的框架来实现,比如 Zookeeper、Consul 等。它们的特点是:

  • 支持多中心注册:服务消费方可以在不同的注册中心之间进行注册和发现,使得服务消费方可以更加灵活地部署在不同的环境中。
  • 支持负载均衡:服务消费方可以通过注册中心来实现负载均衡,使得服务实例可以更加均匀地分配到不同的客户端。
  • 支持容错:服务消费方可以通过注册中心来实现容错,当服务实例发生故障时,注册中心可以自动将该实例进行标记,并重新分配服务实例给客户端。

1.2服务发布的中心:

服务发布的中心是负责服务发布和发现的组件。当服务提供者需要提供服务时,它会向注册中心发送发布请求,注册中心会记录下该服务提供者的发布信息,包括服务提供者的 IP 地址、端口号、服务版本号等。当服务消费者需要找到可用的服务时,注册中心会根据服务提供者的发布信息,自动查找可用的服务实例,并将调用请求发送给服务实例。

服务发布的中心通常使用一些开源的框架来实现,比如 Zookeeper、Consul 等。它们的特点是:

  • 支持多中心发布:服务提供者可以在不同的注册中心之间进行发布和发现,使得服务提供者可以更加灵活地部署在不同的环境中。
  • 支持负载均衡:服务消费者可以通过注册中心来实现负载均衡,使得服务实例可以更加均匀地分配到不同的客户端。
  • 支持容错:服务消费者可以通过注册中心来实现容错,当服务实例发生故障时,注册中心可以自动将该实例进行标记,并重新分配服务实例给客户端。

2. Dubbo 服务消费的注册与发现的工作原理和流程

在这里插入图片描述

  1. 消费者向注册中心订阅服务,注册中心返回该服务的所有提供者地址列表。
  2. 消费者获取到服务提供者地址列表后,会进行负载均衡,选择其中一个服务提供者进行服务调用。
  3. 如果是静态服务列表,消费者直接调用服务即可。
  4. 如果是动态服务列表,消费者通过负载均衡器选择一个服务提供者,向该提供者发起服务请求,提供者返回服务结果,负载均衡器将结果返回给消费者。

以上Dubbo 服务消费的注册与发现的工作原理和流程的时序图和说明。

3. Dubbo 服务消费的注册与发现的配置和使用

Dubbo 服务消费的注册与发现是基于 Zookeeper 实现的,以下是一个简单的配置和使用代码示例:

3.1 配置 Zookeeper

首先,需要在 Dubbo 项目的依赖中包含 Zookeeper 依赖包,并且需要在 application.properties 文件中配置 Zookeeper 的地址、端口号等信息,如下所示:

zookeeper://127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183/ DubboZookeeper?zkServers=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183  
 DubboApplication.main(args=['config.properties'])  

其中,zoo_sample.zkServers 属性配置了 Dubbo 项目的 Zookeeper 服务器地址和端口号,DubboApplication 是 Dubbo 的主类,参数 args 中包含了配置的配置文件信息。

3.2 配置服务提供者

在 Dubbo 项目中,需要创建一个服务提供者,并在其中配置 Zookeeper 的地址、端口号等信息,如下所示:

@Component  
@Stateless  
public class MyService implements MyServiceInterface {  
    @Override  
    public String sayHello() {  
        return "Hello,nezhage!";  
    }  
}

其中,MyServiceInterface 是服务提供者实现的接口,MyService 是具体的服务提供者实现类。

3.3 配置服务消费者

在 Dubbo 项目中,需要创建一个服务消费者,并在其中配置 Zookeeper 的地址、端口号等信息,如下所示:

@Component  
@Service  
public class MyConsumer {  
    private final static String ZOERO_PATH = "zoo_sample";  
    private final static String ZOCK_PASSWORD = "mypassword";  
    private final static String STANDALONE = "standalone";

    @Autowired  
    private MyServiceInterface myService;

    public void consume(String message) {  
        System.out.println("Received message: " + message);  
        myService.sayHello();  
    }  
}

其中,MyConsumer 是具体的服务消费者实现类,它通过注入 MyServiceInterface 实现了对服务提供者的调用。

3.4 启动服务消费者和服务提供者

在 Zookeeper 中创建了服务消费者和服务提供者之后,需要使用命令行启动它们,如下所示:

java -cp dubbo-sample-assembly-1.0.0.jar:dubbo-application-1.0.0.jar:zookeeper-3.4.6.jar:org.apache.zookeeper_3.4.6.jar MyConsumer  
java -cp dubbo-sample-assembly-1.0.0.jar:dubbo-application-1.0.0.jar:zookeeper-3.4.6.jar:org.apache.zookeeper_3.4.6.jar MyService  

其中,MyConsumer 和 MyService 分别是服务消费者和服务提供者的主类名,可以根据实际情况进行修改。

3.5 测试服务消费

启动服务提供者和消费者之后,可以使用命令行进行测试,如下所示:

java -cp dubbo-sample-assembly-1.0.0.jar:dubbo-application-1.0.0.jar:zookeeper-3.4.6.jar:org.apache.zookeeper_3.4.6.jar com.example.consumer MyConsumer  
java -cp dubbo-sample-assembly-1.0.0.jar:dubbo-application-1.0.0.jar:zookeeper-3.4.6.jar:org.apache.zookeeper_3.4.6.jar com.example.service MyService  

其中,com.example.consumer 和 com.example.service 分别是服务消费者和服务提供者的类名。

三、Dubbo 服务消费的消息代理

1. Dubbo 服务消费的消息代理的基本概念和特点

Dubbo 服务消费的消息代理是 Dubbo 框架中的一个重要组件,它用于实现服务消费者的远程调用,并支持负载均衡和容错等功能。

Dubbo 服务消费的消息代理主要特点如下:

  • 支持多种消息传输协议:Dubbo 服务消费的消息代理支持多种消息传输协议,包括 JMS、AMQP、Kafka 等,可以满足不同场景下的消息传输需求。
  • 支持负载均衡:Dubbo 服务消费的消息代理支持负载均衡,可以将请求分配到多个服务提供者上,提高服务的性能和可靠性。
  • 支持容错:Dubbo 服务消费的消息代理支持容错,可以在服务提供者发生故障时,自动将请求转发到其他可用服务提供者上,保证服务的可用性和稳定性。

2. Dubbo 服务消费的消息代理的工作原理和流程

Dubbo 服务消费的消息代理工作原理如下:

当服务消费者需要调用服务提供者时,它会向 Dubbo 消息代理发送消息,请求 Dubbo 消息代理将请求转发给服务提供者。Dubbo 消息代理接收到这个消息后,会将这个消息封装成一个 Dubbo 请求对象,并使用 Dubbo 请求对象的 API 调用服务提供者。

服务提供者接收到 Dubbo 请求对象后,会根据请求对象中的数据,执行相应的操作,并将结果返回给 Dubbo 消息代理。Dubbo 消息代理接收到服务提供者返回的消息后,会将消息解封,并调用服务消费者 API 中相应的方法,将结果返回给服务消费者。

Dubbo 服务消费的消息代理的流程如下:

在这里插入图片描述

流程说明:

  1. 服务消费者向 Dubbo 服务代理发起服务调用请求。
  2. Dubbo 服务代理通过注册中心查询服务提供者列表。
  3. 注册中心返回服务提供者列表给 Dubbo 服务代理。
  4. Dubbo 服务代理向消息代理发送请求。
  5. 消息代理将请求转发给服务提供者。
  6. 服务提供者执行相应的操作,并将结果返回给消息代理。
  7. 消息代理将响应返回给 Dubbo 服务代理。
  8. Dubbo 服务代理将响应返回给服务消费者。

3. Dubbo 服务消费的消息代理的配置和使用

3.1 创建消息代理配置类

在 Dubbo 项目中创建一个名为 message-proxy.xml 的文件,用于配置 Dubbo 消息代理。在该文件中,需要配置以下信息:

  • java.naming.factory.initial:用于配置 Dubbo 消息代理的命名空间和服务发现机制。例如,可以配置为 java.naming.factory.url.pkgs=com.example.group.pkg
  • java.naming.factory.url.pkgs:用于配置 Dubbo 消息代理的服务发现机制。例如,可以配置为 java.naming.factory.url.pkgs=com.example.group.pkg

3.2 添加 @EnableMessageProxy 注解

在需要启用 Dubbo 消息代理的类上添加 @EnableMessageProxy 注解,例如:

@Component  
@EnableMessageProxy  
public class MyConsumer {  
 
    // ...  
}

3. 3 添加消息代理的配置信息

在需要使用 Dubbo 消息代理的服务消费者中添加消息代理的配置信息,例如:

@Service  
public class MyConsumer {  
 
    @Autowired  
    private MyMessageProxy messageProxy;  
 
    public void consume(String message) {  
        System.out.println("Received message: " + message);  
        MyMessageProxy.outboundMessageHandler(message);  
    }  
}

在该代码中,MyMessageProxy 是 Dubbo 消息代理的实现类,outboundMessageHandler 方法用于将接收到的消息代理到 Dubbo 消息代理中进行处理。

3.4 启动 Dubbo 消息代理服务

在控制台中启动 Dubbo 消息代理服务,例如:

java -cp /path/to/dubbo-2.7.4.jar:/path/to/dubbo-reflection-2.7.4.jar:/path/to/commons-lang-2.6.jar:/path/to/grouper-core-6.2.0.jar:/path/to/zookeeper-3.4.6.jar:/path/to/dubbo-zookeeper-2.7.4.jar org.apache.dubbo.rpc.receiver.ReceiverStartUtil.start(ReceiverStartUtil.java:35)  

在控制台中可以查看 Dubbo 消息代理的运行状态和日志信息。

通过以上步骤,就可以使用 Dubbo 消息代理实现服务消费者的远程调用,并支持负载均衡和容错等功能。

四、Dubbo 服务消费的负载均衡

1. Dubbo 服务消费的负载均衡的基本概念和特点

1.1 特点:

  • 基于注解的负载均衡:Dubbo 提供了基于注解的负载均衡配置,用户可以通过注解的方式指定负载均衡策略,如轮询、加权轮询、最小连接数等。
  • 支持多种负载均衡算法:Dubbo 支持多种负载均衡算法,如轮询、加权轮询、最小连接数、加权最小连接数等,用户可以根据实际需求选择合适的算法。
  • 支持自定义负载均衡策略:Dubbo 支持自定义负载均衡策略,用户可以通过编写自定义的负载均衡算法来实现特定的负载均衡策略。

1.2 基本概念:

  • 服务:Dubbo 中的服务是指一个可被调用的 API,它通常由一组接口定义和实现组成。
  • 服务实例:服务实例是指一个实际运行的服务器,它负责响应服务请求并提供服务。
  • 负载均衡器:负载均衡器是指一个用于将请求分配到多个服务器或处理器上的组件,它通常是一个路由器、交换机等。
  • 负载均衡策略:负载均衡策略是指一种将请求分配到多个服务实例上的算法,它可以根据服务实例的负载、可用性等因素来进行分配。
  • 权重:权重是指一个用于分配请求到多个服务实例上的参数,它可以根据服务实例的负载、可用性等因素来动态调整分配比例。

2. Dubbo 服务消费的负载均衡的工作原理和流程

Dubbo 服务消费的负载均衡的工作原理可以概括为以下几个步骤:

  1. 当客户端发送服务请求时,负载均衡器接收到请求并将其转发到一个或多个服务实例上。
  2. 服务实例会根据负载均衡策略选择接收请求,如果服务实例没有处理请求的能力,则它会将请求转发到下一个服务实例上,以此类推。
  3. 每个服务实例都会尽力处理请求,并且负载均衡器会根据服务实例的负载、可用性等因素来动态调整请求的分配比例。
  4. 如果某个服务实例处理请求失败,负载均衡器会将请求转发到下一个服务实例上,以此类推,直到请求被成功处理或者所有服务实例都被调用完毕。

在 Dubbo 中,负载均衡器通常是通过路由器、交换机等组件来实现的。路由器用于将请求转发到不同的服务实例上,交换机用于管理多个服务实例的连接状态。同时,Dubbo 还支持自定义负载均衡算法,用户可以通过编写自定义的负载均衡算法来实现特定的负载均衡策略。

Dubbo 服务消费的负载均衡的流程如下:

在这里插入图片描述

流程说明:

  1. 服务消费者向负载均衡器发送请求。
  2. 负载均衡器从服务注册中心获取当前可用的服务提供者列表,并根据负载均衡算法选择一个服务提供者。
  3. 负载均衡器调用被选中的服务提供者,并将请求转发过去。
  4. 服务提供者执行相应的操作,并将结果返回给负载均衡器。
  5. 负载均衡器将服务提供者返回的结果转发给服务消费者。

3. Dubbo 服务消费的负载均衡的配置和使用

3.1 配置方式

在 Dubbo 的配置文件中,可以使用负载均衡相关的配置项来指定负载均衡策略和权重。例如:

<dubbo:service interface="com.example.demo.HelloService"  
             name="hello" port="8080"  
             loadBalancer-class="com.alibaba.csp.负载均衡.helpers.DefaultLoadBalance">  
              <dubbo:import key="bootstrap.properties"/>  
              <dubbo:reference id="helloService" interface="com.example.demo.HelloService"/>  
             </dubbo:service>  

在上面的配置中,loadbalance-class 属性指定了负载均衡器的类型为 com.alibaba.csp.负载均衡.helpers.DefaultLoadBalance,它实现了一个简单的负载均衡算法,将请求轮流分配给服务实例。weight 属性指定了每个服务实例的权重,权重值越大,请求被分配到该服务实例的概率就越大。

3.2注解方式

在 Dubbo 的接口上,可以使用 @LoadBalance 注解来指定负载均衡策略和权重。例如:

@Service  
public class MyService {  
   @LoadBalance  
   public String sayHello(String name) {  
       return "Hello, " + name;  
   }  
}

在上面的代码中,@LoadBalance 注解指定了负载均衡策略为 @LoadBalance.Strategy 中的 轮询策略,并且使用了 @LoadBalance.Weight 注解来指定每个服务实例的权重。具体来说,权重值 1.0 表示该服务实例处理请求的概率为 100%,而权重值 0.5 表示该服务实例处理请求的概率为 50%。

需要注意的是,负载均衡器的配置和使用方式可能因具体情况而异,具体实现方式需要根据具体需求进行调整。

五、Dubbo 服务消费的安全控制

1. Dubbo 服务消费的安全控制的基本概念和特点

Dubbo 服务消费的安全控制是指在服务消费过程中,对服务请求进行安全过滤和认证,以确保服务请求的安全性和可靠性。下面是 Dubbo 服务消费的安全控制的基本概念和特点:

1.1 基本概念

  • 服务安全控制:服务消费的安全控制是指在服务消费过程中,对服务请求进行安全过滤和认证,以确保服务请求的安全性和可靠性。
  • 服务消费者:服务消费者是指调用 Dubbo 服务的客户端应用程序。
  • 服务接口:服务接口是指 Dubbo 服务的定义,它通常包含方法的签名和参数类型等信息。
  • 安全认证:安全认证是指对服务请求进行身份验证和授权的过程,以确保服务请求的合法性和安全性。
  • 安全过滤:安全过滤是指对服务请求进行安全检查和过滤的过程,以确保服务请求的合法性和安全性。

1.2 特点

  • 基于注解的配置:Dubbo 服务消费的安全控制可以通过注解的方式实现,这使得其配置更加简单和灵活。
  • 支持多种认证方式:Dubbo 服务消费的安全控制支持多种认证方式,如 Basic 认证、SSL 认证、OAuth 认证等,用户可以根据自己的需求进行选择。
  • 支持多种过滤方式:Dubbo 服务消费的安全控制支持多种过滤方式,如黑白名单过滤、IP 过滤、URL 过滤等,用户可以根据自己的需求进行选择。
  • 可扩展性:Dubbo 服务消费的安全控制可以通过扩展实现,用户可以根据自己的需求进行自定义扩展。
  • 安全性高:Dubbo 服务消费的安全控制采用了多种安全措施,如加密传输、访问控制等,可以有效地保障服务请求的安全性

2. Dubbo 服务消费的安全控制的流程和配置方法

Dubbo 服务消费的安全控制的流程如下:

  1. 服务消费者发起请求,请求中包含了安全信息,如用户名和密码等。
  2. Dubbo 消息代理接收到请求后,会验证请求中的安全信息的合法性,如用户是否存在、密码是否正确等。
  3. 如果验证通过,则 Dubbo 消息代理将请求转发给服务提供者。
  4. 服务提供者接收到请求后,进行相关的操作,并返回结果给 Dubbo 消息代理。
  5. Dubbo 消息代理将服务提供者返回的结果进行加密处理,然后将结果返回给服务消费者。

在这里插入图片描述

上面中,服务消费者通过 Dubbo 消息代理向服务提供者发起请求,请求中包含了安全信息。Dubbo 消息代理接收到请求后,首先对安全信息进行验证,验证通过后转发请求给服务提供者,服务提供者进行相应的操作后,将结果返回给 Dubbo 消息代理。Dubbo 消息代理将服务提供者返回的结果进行加密处理,然后将结果返回给服务消费者。如果验证不通过,则 Dubbo 消息代理将返回错误信息给服务消费者。

Dubbo 服务消费的安全控制可以通过配置来实现,以下是 Dubbo 服务消费的安全控制的配置方法:

  1. 配置加密组件

要在 Dubbo 服务消费中使用加密技术,需要先配置加密组件。具体来说,需要配置加密钥、加密算法、签名算法等参数。例如:

import java.util.Properties;

public class SecurityConfig {  
    //私有静态常数,表示密钥和算法
    private static final String SECRET_KEY = "your-secret-key";
    private static final String ALGORITHM = "your-algorithm";
    private static final String SIGNATURE_ALGORITHM = "your-signature-algorithm";

    public static void main(String[] args) throws Exception {
        //创建一个新的Properties对象,将所有安全属性与其值存储在其中
        Properties props = new Properties();  
        props.put("security.algorithm", ALGORITHM); 
        props.put("security.key-store.type", "jks");
        props.put("security.key-store.location", "path/to/your/keystore");  
        props.put("security.key-store.password", "your-keystore-password");  
        props.put("security.key-store.alias", "your-keystore-alias");  
        props.put("security.key-store.type", "jks");

        //获取其他必要的属性和值
        String keystorePath = props.getProperty("security.key-store.location");  
        String keystorePassword = props.getProperty("security.key-store.password");  
        String keystoreAlias = props.getProperty("security.key-store.alias");  
        String algorithm = props.getProperty("security.algorithm");  
        String secretKey = props.getProperty("security.key-store.password");

        //使用JKS格式加载密钥库
        KeyStore keyStore = KeyStore.getInstance("JKS");  
        keyStore.load(new FileInputStream(keystorePath), keystorePassword.toCharArray());  
        //使用SunX509算法初始化密钥管理器工厂,此算法是用于X.509证书管理的标准
        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");  
        keyManagerFactory.init(keyStore, keystorePassword.toCharArray());

        //使用指定算法初始化SSL上下文
        SSLContext sslContext = SSLContext.getInstance(algorithm);  
        //初始化SSL上下文与公钥证书相关联的KeyManagers,并使用X509TrustManager进行身份验证
        sslContext.init(keyManagerFactory.getKeyManagers(), new X509TrustManager() {  
            public X509Certificate[] getAcceptedIssuers() {  
                return null;  
            }

            public void checkClientTrusted(X509Certificate[] certs, String authType) {  
                //...
            }

            public void checkServerTrusted(X509Certificate[] certs, String authType) {  
                 ///...
            }  
        }, new SecureRandom());

        //使用指定算法初始化加密密码
        Cipher cipher = Cipher.getInstance(algorithm);  
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);

        //创建自定义的SocketFactory实例,使用SslSocket套接字进行加密通信
        sslContext.setSSLSocketFactory(new SocketFactory() {  
            public Socket createSocket(String host, int port, InetAddress localAddress, int localPort) throws SocketException {  
                return new SslSocket(host, port, localAddress, localPort, cipher);  
            }  
        });

        //创建SSL套接字并连接到服务器
        SSLSocket sslSocket = (SSLSocket) sslContext.getSocketFactory().createSocket();  
        sslSocket.connect(new InetSocketAddress(host, port), 443);  
        System.out.println("Connected to server"); 
        //开始SSL握手,建立安全连接
        sslSocket.startHandshake();  
        System.out.println("Handshake completed");  
    }  
}

在上面的配置中,需要将 SECRET_KEYALGORITHMSIGNATURE_ALGORITHM 等参数设置为合适的值,以实现加密和认证功能。

3. Dubbo 服务消费的负载均衡的配置和使用

在 Dubbo 中,服务消费的负载均衡可以用来提高服务的可用性和性能,它可以通过配置和注解两种方式来实现。下面分别给出这两种方式的代码示例:

3.1 配置方式

在 Dubbo 的配置文件中,可以使用负载均衡相关的配置项来指定负载均衡策略和权重。例如:

<dubbo:service interface="com.example.demo.HelloService"  
             name="hello" port="8080" loadbalance-class="com.alibaba.csp.负载均衡.helpers.DefaultLoadBalance">  
              <dubbo:import key="bootstrap.properties"/>  
              <dubbo:reference id="helloService" interface="com.example.demo.HelloService"/>  
             </dubbo:service>  

在上面的配置中,loadbalance-class 属性指定了负载均衡器的类型为 com.alibaba.csp.负载均衡.helpers.DefaultLoadBalance,它实现了一个简单的负载均衡算法,将请求轮流分配给服务实例。weight 属性指定了每个服务实例的权重,权重值越大,请求被分配到该服务实例的概率就越大。

3.2 注解方式

在 Dubbo 的接口上,可以使用 @LoadBalance 注解来指定负载均衡策略和权重。例如:

@Service  
public class MyService {  
   @LoadBalance  
   public String sayHello(String name) {  
       return "Hello, " + name;  
   }  
}

在上面的代码中,@LoadBalance 注解指定了负载均衡策略为 @LoadBalance.Strategy 中的 轮询策略,并且使用了 @LoadBalance.Weight 注解来指定每个服务实例的权重。具体来说,权重值 1.0 表示该服务实例处理请求的概率为 100%,而权重值 0.5 表示该服务实例处理请求的概率为 50%。

3. Dubbo 服务消费的加密和认证技术的使用

在 Dubbo 中,服务消费的加密和认证技术可以用来保护服务请求的隐私和安全。下面分别介绍这两种技术的使用方式:

3.1 加密技术

Dubbo 支持多种加密技术,包括 SHA-256 签名、RSA 签名、HTTPS 加密等。在使用加密技术时,需要先配置加密组件,例如:

<dubbo:service interface="com.example.demo.HelloService"    
             name="hello" port="8080"    
             加密="true">    
              <dubbo:import key="bootstrap.properties"/>    
              <dubbo:reference id="helloService" interface="com.example.demo.HelloService"/>    
             </dubbo:service>    

在上面的配置中,加密="true" 表示启用加密技术,使用了 SHA-256 签名。在服务消费过程中,客户端会使用加密技术对服务请求进行签名,服务端会验证签名来确保请求的安全性。

3.2 认证技术

Dubbo 支持多种认证技术,包括 Basic 认证、SSL 认证、OAuth 认证等。在使用认证技术时,需要先配置认证组件,例如:

<dubbo:service interface="com.example.demo.HelloService"    
             name="hello" port="8080"    
             认证="true">    
              <dubbo:import key="bootstrap.properties"/>    
              <dubbo:reference id="helloService" interface="com.example.demo.HelloService"/>    
             </dubbo:service>    

在上面的配置中,认证="true" 表示启用认证技术,使用了 Basic 认证。在服务消费过程中,客户端会使用 Basic 认证对服务请求进行认证,服务端会验证认证来确保请求的安全性。

上一篇:Dubbo高手之路2,6种扩展机制详解


在这里插入图片描述

🏆本文收录于,Java进阶教程系列。

全网最细Java零基础手把手入门教程,系列课程包括:基础篇、集合篇、Java8新特性、多线程、代码实战,持续更新中(每周1-2篇),适合零基础和进阶提升的同学。

🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/82436.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

帆软大屏2.0企业制作

&#xfffc; 数字化观点中心 / 当前页 如何从0-1制作数据大屏&#xff0c;我用大白话给你解释清楚了 文 | 商业智能BI相关文章 阅读次数&#xff1a;18,192 次浏览 2023-06-08 11:51:49 好莱坞大片《摩天营救》中有这么一个场景&#xff1a; &#xfffc; 你可以看见反派大b…

CentOS7.9手工配置静态网络流程

进入网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 配置 TYPE"Ethernet" PROXY_METHOD"none" BROWSER_ONLY"no" BOOTPROTO"static" //static 配置静态网络 DEFROUTE"yes" IPV4_FAILURE_FATAL"no…

2. Linux Server 20.04 Qt5.14.2配置Jetson Orin Nano Developer Kit 交叉编译环境

最近公司给了我一块Jetson Orin Nano的板子&#xff0c;先刷了系统&#xff08;1.Jetson Orin Nano Developer Kit系统刷机&#xff09;又让我搭建交叉编译环境&#xff0c;所以有了下面的文章 一 :Qt5.14.2交叉编译环境安装 1.准备 1.1设备环境 1.1.1 Server: Ubuntu20.0…

vue2+Spring Boot2.7 大文件分片上传

之前我们文章 手把手带大家实现 vue2Spring Boot2.7 文件上传功能 将了上传文件 但如果文件很大 就不太好处理了 按正常情况甚至因为超量而报错 这里 我弄了个足够大的文件 我们先搭建 Spring Boot2.7 环境 首先 application.yml 代码编写如下 server:port: 80 upload:path:…

前端对文件转换处理的一些常用方法

文章目录 0&#xff0c;前言1&#xff0c;将图片的url网络链接(http://) 转为base64格式2&#xff0c;将base64的图片数据转换为file文件3&#xff0c;将以base64的图片数据转换为Blob4&#xff0c;将file文件转化为base645&#xff0c;将file文件转换为Blob6&#xff0c;获取文…

qt显示图片并转换成灰度图及伪彩图

写了个程序&#xff0c;可在途图片&#xff0c;并切换成灰度图及伪彩图显示&#xff0c;主要代码如下&#xff1a; #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainW…

vlan实验

配置 r1 sw1 sw2

回归预测 | MATLAB实现GA-RBF遗传算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现GA-RBF遗传算法优化径向基函数神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现GA-RBF遗传算法优化径向基函数神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果…

all in one之安装pve(第一章)

第一章 安装PVE PVE安装 pverufusultraISO下载地址下载地址下载地址 因为我使用的是SD卡存储&#xff0c;尝试rufus安装失败&#xff0c;建议使用 ultraISO进行镜像写入。 U盘推荐4G往上。 下载pve 我下载的pve版本是7.4 ultraISO 把镜像写入u盘 下载完成后需要把镜像文件…

Datawhale Django后端开发入门 Vscode TASK02 Admin管理员、外键的使用

一.Admin管理员的使用 1、启动django服务 使用创建管理员之前&#xff0c;一定要先启动django服务&#xff0c;虽然TASK01和TASK02是分开的&#xff0c;但是进行第二个流程的时候记得先启动django服务&#xff0c;注意此时是在你的项目文件夹下启动的&#xff0c;时刻注意要执…

vue:this和that的理解

当我们进入公司的时候会发现一个很常见的情况&#xff0c;就是你的前开发者会常用这么一个变量&#xff1a;that、self… 为什么会用到that、self呢&#xff0c;小编是这么理解的&#xff0c;this指向的是当前的对象&#xff0c;而that、self是临时的变量&#xff0c;为了临时存…

水果成篮(力扣)双指针滑动窗口 JAVA

你正在探访一家农场&#xff0c;农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示&#xff0c;其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能多地收集水果。然而&#xff0c;农场的主人设定了一些严格的规矩&#xff0c;你必须按照要求采摘水果&…

三重奏的和谐:如何完美对齐公司、部门与个人目标

引言 在企业的运营和管理中&#xff0c;目标的设定与对齐是至关重要的。它不仅决定了公司的方向和愿景&#xff0c;还影响到每一个部门和团队成员的工作内容和效果。如何确保公司目标、部门目标和团队个人目标之间的完美对齐&#xff0c;是每一个管理者都需要面对的挑战。 目…

JDK中的Timer总结

目录 一、背景介绍二、思路&方案三、过程1.Timer关键类图2.Timer的基本用法3.结合面向对象的角度进行分析总结 四、总结五、升华 一、背景介绍 最近业务中使用了jdk中的Timer&#xff0c;通过对Timer源码的研究&#xff0c;结合对面向对象的认识&#xff0c;对Timer进行针…

从NLP到聊天机器人

一、说明 今天&#xff0c;当打电话给银行或其他公司时&#xff0c;听到电话另一端的机器人向你打招呼是很常见的&#xff1a;“你好&#xff0c;我是你的数字助理。请问你的问题。是的&#xff0c;机器人现在不仅可以说人类语言&#xff0c;还可以用人类语言与用户互动。这是由…

获取excel中的图片(包含wps中嵌入单元格图片)

项目中有excel导入功能,并且需要导入excel中的图片;模板如图: 已知office中插入的图片为浮动形式;如图: wps中可以插入浮动图片,也可以插入嵌入单元格图片;如图: 并且在wps嵌入单元格形式的图片可以看到使用的是公式;如图: 问题来了,如何获取图片 并且将图片与单元格进行对应 …

Apache DolphinScheduler 支持使用 OceanBase 作为元数据库啦!

DolphinScheduler是一个开源的分布式任务调度系统&#xff0c;拥有分布式架构、多任务类型、可视化操作、分布式调度和高可用等特性&#xff0c;适用于大规模分布式任务调度的场景。目前DolphinScheduler支持的元数据库有Mysql、PostgreSQL、H2&#xff0c;如果在业务中需要更好…

【GitHub】Pycharm本地项目打包上传到Github仓库的操作步骤

文章目录 1、Pycharm端的设置操作2、Github端的设置操作3、Pycharm上配置Github4、Git本地项目至GitHub仓库5、前往Github中查看确认6、常见报错 1、Pycharm端的设置操作 通过CtrlAltS快捷组合键的方式&#xff0c;打开设置&#xff0c;导航到版本控制一栏中的Git&#xff0c;…

LTPP在线开发平台【使用教程】

LTPP在线开发平台 点击访问 LTPP在线开发平台 LTPP&#xff08;Learning teaching practice platform&#xff09;在线开发平台是一个编程学习网站&#xff0c;该网站集文章学习、短视频、在线直播、代码训练、在线问答、在线聊天和在线商店于一体&#xff0c;专注于提升用户编…

QT处理日志文件

由于实际生产需要&#xff0c;软件系统的运行&#xff0c;会产生大量的日志文件&#xff0c;有时候一天就能产生超过百万条log记录&#xff0c;那么为了能够处理日志文件&#xff0c;查询并且找到我们想要的报错信息&#xff0c;因此不得不考虑怎么实现&#xff0c;打开大日志文…