RocketMQ4.9.2 ACL权限控制实战:从配置到Java客户端集成

Docker部署RocketMQ 4.9.7实战:从零配置ACL权限与Dashboard登录(附常见问题排查) 本文详细介绍了使用Docker部署RocketMQ 4.9.7并配置ACL权限的完整实战流程。内容涵盖从零构建企业级安全体系,包括Docker Compose编排、ACL权限矩阵设计、Dashboard登录配置,并针对生产者列表不显示等常见问题提供了深度排查与解决方案,帮助搭建安全可靠的消息中间件环境。 阅读详情

1. 为什么你的RocketMQ需要ACL权限控制?

大家好,我是老张,在消息队列这块摸爬滚打快十年了。记得去年我们团队就踩过一个坑:一个测试环境的RocketMQ集群,因为没做任何权限管控,被隔壁项目组的同学误操作,把线上几个核心Topic的消息给消费掉了,直接导致线上业务数据对不上,排查了大半天。这事儿之后,我们立刻在所有环境都上了ACL。

简单来说,ACL(Access Control List,访问控制列表) 就是RocketMQ的“门禁系统”。想象一下,你家的消息队列就像一个存放重要文件的仓库,以前谁都能进,现在你得给每个人发张门禁卡,规定谁能进、能进哪个房间、能看哪些文件。在RocketMQ里,这个“门禁卡”就是用户名密码,“房间”就是Topic和Consumer Group,“能干什么”就是发布(PUB)或订阅(SUB)的权限。

在4.9.2这个版本,RocketMQ的ACL功能已经比较成熟稳定了。它主要管三件事:

  1. 你是谁(用户):通过accessKey和secretKey(类似账号密码)来识别身份。
  2. 你想动什么(资源):主要是Topic(主题)和Consumer Group(消费组)。
  3. 你能怎么动(权限):允许(PUB|SUB)、拒绝(DENY)、只发布(PUB)、只订阅(SUB)。

如果你正在负责一个多团队共用、或者有安全合规要求(比如等保)的项目,给RocketMQ加上ACL绝对是必选项。它能有效防止误操作、越权访问,甚至是恶意攻击,让整个消息链路更可控、更安全。接下来,我就手把手带你从零开始,把RocketMQ 4.9.2的ACL配置和Java客户端集成整个流程跑通。

2. 5分钟快速开启Broker端的ACL开关

开启ACL,首先得在Broker端进行配置。别怕,步骤很简单,主要就是改两个配置文件。我假设你已经有一套RocketMQ在运行了(单机或集群都行)。

2.1 第一步:修改broker.conf,打开ACL总开关

找到你的Broker配置文件,通常是在${ROCKETMQ_HOME}/conf目录下的broker.conf(或者你自定义的配置文件)。用vim或者你喜欢的编辑器打开它,找到或者添加下面这行核心配置:

# ACL总开关,设置为true才能启用权限控制
aclEnable=true

这个参数默认是false,所以不配就是“裸奔”状态。把它改成true,Broker就会开始对所有的连接请求进行权限校验。这里有个我踩过的坑:记得检查你的brokerIP1和namesrvAddr配置是否正确,尤其是集群环境,IP地址一定要配置成当前机器可被外部访问的地址,不然客户端连不上,排查起来很头疼。

一个完整的基础broker.conf配置示例可以参考下面这样,我把关键参数都加上了注释:

# ACL核心开关
aclEnable=true
# Broker对外的IP,非常重要!
brokerIP1=192.168.1.100
# NameServer地址,客户端靠这个找Broker
namesrvAddr=192.168.1.100:9876
# 是否允许自动创建Topic,生产环境建议false
autoCreateTopicEnable=false
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
# 文件清理时间
deleteWhen=04
fileReservedTime=48
broRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH

改完之后,重启Broker使配置生效。你可以通过./mqbroker -c ../conf/broker.conf来指定配置文件启动,或者用nohup挂到后台。

2.2 第二步:详解plain_acl.yml权限规则文件

光打开开关还不够,你得告诉Broker具体的规则。规则定义在${ROCKETMQ_HOME}/conf/plain_acl.yml文件里。这个文件是YAML格式的,缩进特别重要,写错了Broker可能启动失败或者规则不生效。

这个文件结构清晰,主要分两大块:全局IP白名单和用户账户权限。我结合一个生产环境中常用的配置例子,给你拆开讲明白。

# 第一部分:全局IP白名单
# 这里列出的IP地址,可以直接访问所有资源,无需账号密码。通常用于集群内部机器(如Broker、NameServer之间)的通信。
globalWhiteRemoteAddresses:
  - 10.10.103.*   # 支持通配符,表示10.10.103网段的所有IP
  - 192.168.1.100 # 也可以写具体的IP
  - 192.168.1.101

# 第二部分:用户账户及权限定义
accounts:
  # 第一个账户:普通应用账户,有严格的权限限制
  - accessKey: AppUser1      # 用户名,客户端连接时使用
    secretKey: MySecretPass123 # 密码,务必复杂一些
    whiteRemoteAddress: 192.168.2.* # 此用户允许连接的客户端IP段(可选)
    admin: false             # 是否为管理员,false表示普通用户
    defaultTopicPerm: DENY   # 默认Topic权限:拒绝所有。这是最安全的做法,白名单制。
    defaultGroupPerm: SUB    # 默认Group权限:只允许订阅。通常消费组权限管理更宽松。
    topicPerms:              # 针对特定Topic的精细权限
      - `OrderTopic=PUB|SUB` # 对OrderTopic有发布和订阅权限
      - `PayTopic=SUB`       # 对PayTopic只有订阅权限
      - `AuditTopic=DENY`    # 明确拒绝访问AuditTopic
    groupPerms:              # 针对特定Consumer Group的权限
      - `OrderGroup=SUB`
      - `PayGroup=PUB|SUB`

  # 第二个账户:管理员账户,来自特定IP,拥有所有权限
  - accessKey: Admin
    secretKey: AdminPass456
    whiteRemoteAddress: 192.168.1.50 # 限制管理员只能从特定IP登录
    admin: true               # 关键!设为true后,此用户无视下方所有topicPerms/groupPerms规则,拥有全部权限。
    # 当admin为true时,下面的defaultTopicPerm等配置其实不生效了,但建议也配上,保持清晰
    defaultTopicPerm: PUB|SUB
    defaultGroupPerm: PUB|SUB

我来解释一下几个容易混淆的点:

  • admin: true:这是“超级管理员”标志。一旦设置,这个账号就能访问集群内所有的Topic和Group,topicPerms和groupPerms的配置对它无效。这个账号一定要保管好,并且用whiteRemoteAddress限制其来源IP。
  • defaultTopicPerm 和 defaultGroupPerm:这是默认规则。当某个Topic或Group没有在下面的topicPerms或groupPerms列表中被明确提到时,就应用这个默认规则。我强烈建议将defaultTopicPerm设为DENY,采用“默认拒绝,显式允许”的白名单模式,安全性最高。
  • 权限值:
    • PUB: 只能发送消息到该Topic。
    • SUB: 只能从该Topic订阅/消费消息。
    • PUB|SUB 或 SUB|PUB: 既可以发送也可以消费。中间是竖线|。
    • DENY: 明确拒绝任何操作。
  • whiteRemoteAddress:这个配置是用户级别的IP白名单。即使账号密码对了,但如果客户端的IP不在这里面,连接也会被拒绝。这为安全又加了一道锁。

配置文件写好之后,同样需要重启Broker。你可以通过查看Broker的启动日志,搜索“acl”关键字,确认ACL配置是否被成功加载。

3. 让RocketMQ-Console可视化工具也支持ACL

运维同学最喜欢用RocketMQ-Console(现在叫RocketMQ Dashboard)来查看队列情况、发测试消息。但默认的Console可不认识ACL,直接连会报错。我们需要对它进行改造。

3.1 获取支持ACL的Console版本

官方社区版本的Console可能没有预置ACL支持。这里有两个选择:

  1. 自行编译:从Apache RocketMQ的GitHub仓库下载rocketmq-dashboard源码,在配置文件中加入ACL参数后打包。这对新手有点门槛。
  2. 使用已集成的版本:很多社区开发者已经做好了适配。你可以在一些开源仓库或技术博客找到打包好的JAR文件。注意:务必从可信来源获取,以免安全风险。

假设你已经拿到了一个支持ACL的rocketmq-dashboard-1.0.0-SNAPSHOT.jar。

3.2 配置Console连接启用ACL

运行Console时,需要通过JVM参数或配置文件传入ACL的账号密码。通常是通过application.properties或application.yml配置。这里以application.properties为例:

# ACL功能开关,必须为true
rocketmq.config.aclEnabled=true
# 填入你在plain_acl.yml中配置的具有admin权限或相应Topic/Group权限的账号
rocketmq.config.accessKey=Admin
rocketmq.config.secretKey=AdminPass456
# NameServer地址
rocketmq.config.namesrvAddr=192.168.1.100:9876

然后启动Console:

java -jar rocketmq-dashboard-1.0.0-SNAPSHOT.jar --spring.config.location=file:/your_path/application.properties

启动后,用浏览器访问http://your_server_ip:8080(默认端口8080),如果能看到集群和Topic信息,说明Console已经用ACL账号成功连接上了。这时候你在Console上进行的任何操作(如查看消息、发送测试消息)都会经过Broker的ACL校验。

4. Java客户端集成ACL:两种实战方式

Broker和Console都配好了,现在轮到我们的业务应用了。Java客户端集成ACL的核心,就是在创建生产者(Producer)或消费者(Consumer)时,注入一个包含凭证(SessionCredentials)的钩子(RPCHook)。

4.1 基础方式:手动创建AclClientRPCHook

这种方式最直接,适合对RocketMQ原生API比较熟悉的场景。你需要用到org.apache.rocketmq.acl.common.AclClientRPCHook和org.apache.rocketmq.acl.common.SessionCredentials这两个类。

首先,确保你的Maven依赖包含了ACL模块。对于RocketMQ 4.9.2,依赖如下:

<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client</artifactId>
    <version>4.9.2</version>
</dependency>
<!-- ACL核心包 -->
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-acl</artifactId>
    <version>4.9.2</version>
</dependency>

然后,我写一个工具方法来创建这个RPCHook:

import org.apache.rocketmq.acl.common.AclClientRPCHook;
import org.apache.rocketmq.acl.common.SessionCredentials;
import org.apache.rocketmq.remoting.RPCHook;

public class AclUtils {
    /**
     * 创建ACL认证钩子
     * @param accessKey 用户名,对应plain_acl.yml中的accessKey
     * @param secretKey 密码,对应plain_acl.yml中的secretKey
     * @return RPCHook
     */
    public static RPCHook getAclRPCHook(String accessKey, String secretKey) {
        // SessionCredentials对象封装了认证信息
        SessionCredentials credentials = new SessionCredentials(accessKey, secretKey);
        // AclClientRPCHook会在每次RPC调用时,自动将凭证信息附加到请求中
        return new AclClientRPCHook(credentials);
    }
}

接下来,在创建生产者和消费者时,把这个Hook设置进去:

ACL生产者示例:

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;

public class AclSyncProducer {
    public static void main(String[] args) throws Exception {
        // 1. 创建生产者,传入组名和ACL Hook
        DefaultMQProducer producer = new DefaultMQProducer(
            "ProducerGroupName",
            AclUtils.getAclRPCHook("AppUser1", "MySecretPass123") // 使用普通应用账号
        );
        // 2. 设置NameServer地址
        producer.setNamesrvAddr("192.168.1.100:9876");
        // 3. 启动生产者
        producer.start();

        for (int i = 0; i < 10; i++) {
            // 4. 创建消息,指定Topic和Tag
            Message msg = new Message(
                "OrderTopic", // 这个Topic必须在AppUser1的topicPerms里有PUB或PUB|SUB权限
                "TagA",
                ("Hello ACL RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET)
            );
            // 5. 发送消息
            org.apache.rocketmq.client.producer.SendResult sendResult = producer.send(msg);
            System.out.printf("%s%n", sendResult);
        }
        // 6. 关闭生产者
        producer.shutdown();
    }
}

ACL消费者示例:

import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.message.MessageExt;
import java.util.List;

public class AclPushConsumer {
    public static void main(String[] args) throws Exception {
        // 1. 创建消费者,传入组名和ACL Hook
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(
            "ConsumerGroupName",
            AclUtils.getAclRPCHook("AppUser1", "MySecretPass123"), // 使用同一个账号
            new AllocateMessageQueueAveragely() // 负载均衡策略
        );
        // 2. 设置NameServer地址
        consumer.setNamesrvAddr("192.168.1.100:9876");
        // 3. 订阅Topic,这里可以使用Tag进行过滤
        consumer.subscribe("OrderTopic", "*"); // 这个Topic必须在AppUser1的topicPerms里有SUB或PUB|SUB权限
        // 4. 注册消息监听器
        consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {
            for (MessageExt msg : msgs) {
                System.out.printf("收到消息: Topic=%s, MsgId=%s, Body=%s %n",
                    msg.getTopic(), msg.getMsgId(), new String(msg.getBody()));
            }
            // 返回消费成功状态
            return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
        });
        // 5. 启动消费者
        consumer.start();
        System.out.println("消费者已启动...");
        // 保持运行
        Thread.sleep(Long.MAX_VALUE);
        consumer.shutdown();
    }
}

关键点提醒:

  1. GroupName:消费者组名ConsumerGroupName需要在你账号的groupPerms里有对应权限(例如SUB),否则会订阅失败。
  2. 权限匹配:生产者发消息到OrderTopic,要求账号对OrderTopic有PUB权限;消费者从OrderTopic拉消息,要求账号对OrderTopic有SUB权限。两者必须匹配,否则会收到 AclException。
  3. 错误处理:在实际编码中,一定要对producer.send()和消费者启动过程进行异常捕获。常见的ACL错误码如10015表示权限验证失败,你需要根据错误信息检查账号、密码、Topic/Group权限是否正确。

4.2 进阶方式:Spring Boot Starter自动集成

如果你的项目是基于Spring Boot的,那么集成起来会更优雅。RocketMQ官方提供了rocketmq-spring-boot-starter,可以很方便地通过配置文件注入ACL信息。

首先,添加Spring Boot Starter依赖(注意版本匹配):

<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-spring-boot-starter</artifactId>
    <version>2.2.1</version> <!-- 请确认与RocketMQ客户端版本兼容 -->
</dependency>

然后,在application.yml中配置ACL:

rocketmq:
  name-server: 192.168.1.100:9876 # NameServer地址
  producer:
    group: your-producer-group # 生产者组名
    access-key: AppUser1       # ACL用户名
    secret-key: MySecretPass123 # ACL密码
    # 启用ACL
    enable-msg-trace: false # 根据需要设置,非ACL相关
    access-channel: LOCAL
  consumer:
    # 消费者配置类似,如果消费者和生产者在同一应用,且用同一个账号,可以只配producer部分。
    # 如果消费者独立,或使用不同账号,则需要单独配置access-key和secret-key

配置完成后,Spring Boot会自动帮你创建已经注入好ACL凭证的RocketMQTemplate和DefaultMQPushConsumer等Bean。你在代码中直接注入使用即可,完全不用关心RPCHook的创建:

import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Component;

@Component
public class SpringBootAclProducer {

    @Autowired
    private RocketMQTemplate rocketMQTemplate; // 直接注入,已包含ACL信息

    public void sendMessage() {
        // 发送同步消息,destination格式为 `topicName:tagName`
        String destination = "OrderTopic:TagA";
        String messageBody = "Hello from Spring Boot with ACL!";
        rocketMQTemplate.syncSend(destination, messageBody);
        System.out.println("消息发送成功");
    }
}

对于消费者,使用@RocketMQMessageListener注解即可,框架会自动处理ACL认证:

import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;

@Component
@RocketMQMessageListener(
        topic = "OrderTopic",
        consumerGroup = "YourSpringBootConsumerGroup",
        accessKey = "AppUser1", // 可以在这里覆盖全局配置
        secretKey = "MySecretPass123"
)
public class SpringBootAclConsumer implements RocketMQListener<String> {
    @Override
    public void onMessage(String message) {
        System.out.println("收到消息: " + message);
    }
}

这种方式极大地简化了配置,是Spring Boot项目的首选。你只需要确保配置文件中的access-key和secret-key有访问目标Topic和Group的权限。

5. 避坑指南:ACL实战中常见的“坑”与解决方案

配置和集成说起来简单,但实际落地时总会遇到些意想不到的问题。我把我遇到过和从社区里看到的常见“坑”总结一下,希望能帮你少走弯路。

坑1:Broker启动失败,提示“The ACL config file [plain_acl.yml] doesn‘t exist”

  • 原因:Broker在conf目录下找不到plain_acl.yml文件。
  • 解决:检查文件路径和名称是否正确。确保文件在Broker启动命令-c参数指定的配置文件所在目录的conf子目录下。或者,你可以在broker.conf中通过aclConfigPath参数指定plain_acl.yml的绝对路径,例如:aclConfigPath=/home/rocketmq/conf/plain_acl.yml。

坑2:客户端连接成功,但发送/订阅时报错 CODE: 10015 DESC: authorization failed

  • 原因:这是最典型的ACL权限错误。说明账号密码认证通过了,但对特定资源的操作权限不足。
  • 排查步骤:
    1. 核对账号密码:确认客户端使用的accessKey和secretKey与plain_acl.yml中配置的一致,注意大小写。
    2. 检查Topic/Group权限:确认该账号在topicPerms和groupPerms中对目标资源有正确的权限(PUB, SUB, PUB|SUB)。特别注意defaultTopicPerm和defaultGroupPerm,如果是DENY,那么任何未被明确列出的资源都无法访问。
    3. 检查IP白名单:如果账号配置了whiteRemoteAddress,请确认客户端的IP地址在允许的范围内。
    4. 检查admin标志:如果账号是admin: true,那应该拥有所有权限。如果还报错,检查Broker日志看是否有其他异常。

坑3:RocketMQ-Console能连上,但看不到Topic/Group列表,或操作失败

  • 原因:Console使用的账号权限不足。Console需要读取集群的元数据(如Topic列表、消费进度等),这需要较高的权限。
  • 解决:为Console配置一个具有admin: true权限的账号,或者至少确保其defaultTopicPerm和defaultGroupPerm是SUB(对于只读查看)或PUB|SUB,并且能访问相关的系统Topic(如TBW102,这是自动创建Topic时用的,如果autoCreateTopicEnable=false则问题不大)。

坑4:权限变更后不生效

  • 原因:修改了plain_acl.yml文件后,没有重启Broker。ACL配置是在Broker启动时加载到内存的,不支持热加载。
  • 解决:每次修改plain_acl.yml后,必须重启Broker节点。在生产环境,这意味着你需要规划好重启窗口,或者采用集群滚动重启的方式。

坑5:Plain_acl.yml格式错误导致Broker启动失败

  • 原因:YAML文件对缩进(空格)非常敏感,用Tab键或者缩进不对都会导致解析失败。
  • 解决:使用支持YAML语法的编辑器(如VS Code, IntelliJ IDEA),并确保使用空格缩进。可以将配置文件内容粘贴到在线的YAML校验工具中检查格式。Broker启动日志通常会给出具体的解析错误行号。

坑6:客户端日志没有明显错误,但消息就是发送不出去或收不到

  • 原因:可能是网络问题、NameServer地址错误,或者ACL账号没有对应Topic的生产/消费权限。
  • 排查:开启客户端的详细日志。在log4j或logback配置中,将org.apache.rocketmq的日志级别设为DEBUG或INFO,可以看到更详细的连接、认证和权限检查日志。同时,查看Broker端的日志${ROCKETMQ_HOME}/logs/rocketmqlogs/acl.log,里面记录了每一次权限校验的详细结果。

把ACL配上,晚上睡觉都能踏实点。尤其是当你的RocketMQ集群开始承载核心业务流量时,这套权限体系就是最基本的安全护栏。从配置到集成,整个过程其实并不复杂,关键是要理解“用户-资源-权限”这个模型,并且规划好一套清晰的权限分配方案,比如按项目、按团队来划分Topic和Group的访问权。

【RocketMQ】RocketMQ ACL动手实践与踩坑记录 介绍 什么是ACL RocketMQ在4.4.0版本开始支持ACL。ACL是Access Control List的简称,俗称访问控制列表。访问控制,基本上会涉及到用户、资源、权限、角色等概念,那在RocketMQ中上述会对应哪些对象呢? 用户:用户是访问控制的基础要素,也不难理解,RocketMQ ACL必然也会引入用户的概念,即支持用户名、密码 资源:资源,需要保护的对象,在RocketMQ中,消息发送涉及的Topic、消息消费涉及的消费组,应该进行保护,故可以抽象成资源 权限:针对资源,能进行的操作 阅读详情

相关推荐

docker-compose 搭建RocketMQ 5.1.0 集群开启ACL权限控制 | Spring Cloud 29

权限控制(`ACL`)主要为`RocketMQ`提供`Topic`资源级别的用户访问控制。 用户在使用`RocketMQ`权限控制时,可以在`Client`客户端通过 `RPCHook`注入`AccessKey`和`SecretKey签名`;同时,将对应的权限控制属性(包括:`Topic访问权限`、`IP白名单`和`AccessKey`和`SecretKey签名`等)设置在`distribution/conf/plain_acl.yml`的配置文件中。

gmHappy 1万+

RocketMQ ACL使用指南

详细介绍RocketMQ acl访问控制列表的流程图、plain_acl.yml文件各配置项的详细介绍、权限匹配验证流程与acl使用示例。

中间件兴趣圈 2万+

有限状态机FSM详解(一)

有限状态机在维基百科中的解释是: 有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。 至于为什么要学FSM,FSM可以把模型的多状态、多状态间的转换条件解耦。可以使维护变得容易,代码也更加具有可读性,也更加艺术。 理解有限状态机首先需要理解整个模型。我们把灯的开关作为示例,...

benjonc的博客 5万+

rocketmq 之 DLeger集群,启动ACL 1.0,集成rocektmq-mqtt实践

rocektmq与rocektmq-mqtt使用

enjoy.day 1272

mysql 学习笔记(1):mysql 基本概念和 mysql workbench 的基本使用方法

…

qq_52740163的博客 1357

ArcGIS新手必看:HWSD2土壤数据从下载到批量提取TIFF的完整流程

本文详细介绍了ArcGIS中HWSD2土壤数据的完整处理流程,从数据下载、预处理到批量提取TIFF文件。涵盖栅格属性表构建、属性数据连接及性能优化等关键步骤,帮助新手高效掌握HWSD2数据提取技术,提升地理信息数据处理效率。

ll5678的博客 1036

RocketMQ - 权限控制:ACL配置与安全访问

RocketMQ ACL 配置与安全访问摘要 Apache RocketMQ 的 ACL(访问控制列表)机制为分布式消息系统提供关键的安全保障。本文详解如何通过 身份认证+权限授权 构建安全的消息环境: 核心功能 基于 AccessKey/SecretKey 的用户认证 细粒度控制 Topic/Group 的读写权限(PUB/SUB/DENY) IP 白名单限制访问来源 配置流程 启用 broker.conf 的 aclEnable=true 编辑 plain_acl.yml 定义用户权限(含生产级配置模板

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

W5500+STM32F103C8T6进行TCP通信(modbus)

一路生花一、w5500资料二、modbus通信三、从机代码四、总结五、参考 一、w5500资料 w5500的资料就放在下面了,单纯的客户端和其他模式上面有教程 https://www.aliyundrive.com/s/enPnnZgNtpE 二、modbus通信 Modbus RTU通信时使用的数据帧结构如下图,而Moubus TCP通信的数据帧和这个稍微不一样,没有crc检验,因为tcp本就是一种可靠传输协议 这里是Modbus TCP数据帧 公共功能码定义 三、从机代码

junseven164的博客 5780

RocketMQ开启ACL后客户端连接报Algorithm HmacSHA1 not available的解决方式

RocketMQ开启ACL后,客户端、Dashboard连接报Algorithm HmacSHA1 not available错误,异常日志如下 unable to calculate a request signature. error=[10015:signature-failed] unable to calculate a request signature. error=Algorithm HmacSHA1 not available, org.apache.rocket...

Aubrey.J的博客 3064

从大疆智图到Cesium:3D Tiles模型加载与Web三维场景构建实战

本文详细介绍了如何利用大疆智图生成3D Tiles数据,并通过Cesium在Web端实现高效加载与三维场景构建。从大疆智图参数设置到Cesium环境配置,再到3D Tiles性能调优与高级功能实现,提供了一套完整的实战指南,帮助开发者快速掌握3D Tiles模型加载与Web三维场景构建技术。

weixin_30520015的博客 1288

学Simulink——基于Simulink的扰动观测器(DOB)补偿坡道重力分量

(质量5kg,坡度30°,目标速度1m/s)为例,基于Simulink搭建“DOB+PI”复合控制仿真平台,从系统建模、DOB算法推导、离散化实现到Simulink模块搭建,提供模块化模型、核心代码及参数整定表,帮助工程师彻底解决重力等恒值扰动引起的稳态误差问题。采用双线性变换(Tustin): s=Ts​2​z+1z−1​,其中 Ts​为控制周期。模块相加(注意符号:ufinal​=upi​−ucomp​或 upi​+ucomp​,取决于扰动定义方向,此处假设重力为正,控制力需反向抵消,故为减)。

MHD0815的博客 70

RocketMQ的 ACL权限控制

ACL权限控制概念 权限控制(ACL)作用就是指定Topic由哪些用户可以访问,在生产应用中很重要,ACL可以控制我认为正常的用户可以访问我这个指定的topic,其它用户就访问不了,这个功能就是鉴权功能. 另外需要了解的是 其实这种acl用的很少,因为大多数情况下都是运维去控制,而不是Java程序员在代码里面去控制 作为码农了解就行了 开始操作 首先服务端需要配置鉴权的规则,然后客户端需要加上鉴权的信息,分这样的两个步骤 服务端配置鉴权规则 broker.properties添加下面的配置: # 开启鉴权.

张俊杰 的博客 5526

vue2 - elementUI表格table树形结构复选框勾选父子联动示例,el-table树状表格tree复选框checkbox多选框全选/反选取消children(当子级全选中,父级自动勾选)

vue2,elementui,el-table树状表格多选,树形结构结合多选框使用,实现单选父子联动全选反选,勾选联动父级勾选,表格多选check父子联动,table表格children如何嵌入复选框,el-table使用多选框与树形数据写一个有半选全选功能的表格,el-table树形表格实现复选框多选效果,表格树状结构多选,每一个row都可以选中并且联动全选按钮,table选父带子选子带父,树形数据与懒加载,Table表格树形结构多选框选中父级时会选中子级,elementUI表格里树形结构嵌套复选框全选全

✅ 精选推荐文章 1万+

RocketMQ4.9.2 ACL实战:从零配置到生产环境避坑指南(含Console对接)

本文提供了RocketMQ 4.9.2 ACL鉴权的完整实战指南,涵盖从Broker端配置、权限文件编写到与RocketMQ-Console可视化工具对接的全过程。重点解析了生产环境中IP白名单与Topic级权限的组合策略,并分享了Java客户端集成及典型连接失败问题的排查路径,旨在帮助开发者构建安全可靠的消息服务体系。

plum99的博客 650

微波技术仿真:微波谐振器分析_(2).微波谐振器理论

谐振器是一种能够在特定频率范围内存储和释放电磁能量的器件。在微波频段,谐振器通常用于滤波、频率选择和能量存储等应用。一个理想的谐振器在谐振频率下能够存储无限大的能量,但在实际应用中,由于损耗的存在,谐振器的性能会受到一定限制。微波谐振器在微波通信、雷达系统、微波测量和微波电路设计等领域中发挥着重要作用。谐振器的设计需要考虑多个因素,包括谐振频率的精确控制、损耗的最小化、频率稳定性的提高和小型化设计。通过理论分析和仿真工具的使用,可以有效优化谐振器的性能,满足实际应用的需求。

2401_87715305的博客 936

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

RocketMQ ACL权限控制实战:从配置到代码的完整避坑指南

本文提供了一份RocketMQ ACL权限控制的完整实战指南。文章深入剖析了ACL的核心设计哲学与权限模型,详细讲解了Broker端配置文件的避坑要点与动态加载策略,并给出了客户端代码集成的最佳实践。最后,探讨了多租户场景下的权限架构设计与运维监控体系,帮助开发者构建安全、可控的消息中间件环境。

java5的博客 615

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

RocketMQ ACL避坑指南:从IP白名单到Topic权限控制的7个关键配置项

本文深入解析RocketMQ 4.9.2的ACL权限控制体系,从IP白名单到Topic权限控制的7个关键配置项,提供生产环境中的多租户隔离方案和性能优化策略。通过实战案例和代码示例,帮助开发者避免常见配置陷阱,实现安全高效的消息中间件部署。

h6j7k8l9p0的博客 914

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

RocketMQ 安全机制:ACL 权限控制、消息加密与访问安全配置

在分布式消息中间件的应用场景中,安全问题始终是企业级部署的核心考量。RocketMQ 作为阿里开源的高性能消息中间件,提供了一套完善的安全防护体系,涵盖权限控制、数据加密、访问防护等关键维度,有效保障消息从生产到消费全链路的安全性。本文将深入解析 RocketMQ 的核心安全机制,重点聚焦 ACL 权限控制、消息加密方案及访问安全配置实践,为开发者构建安全可靠的消息系统提供参考。

码路同行 1267

RocketMQ - 大规模Topic管理:分区与权限控制

摘要 本文深入探讨了RocketMQ在大规模Topic管理中的核心策略——分区与权限控制。随着业务规模扩张,Topic数量激增带来性能瓶颈与安全挑战。通过合理分区(如电商场景中订单Topic设为32分区),可提升并发处理能力;配合严格的ACL权限机制,确保消息发送与订阅的安全性。文章结合架构图与实战案例,为开发者提供了从基础原理到最佳实践的全方位指导,助力构建高效、安全的分布式消息系统。 🚀🔒

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

RocketMQ 5.x 集群部署实战:3 台机器搞定 2 主 2 从,Docker Host 模式一把梭

RocketMQ 5.3.2 生产级集群部署实战:用 3 台机器搭 2 主 2 从 + 3 NameServer + Dashboard + Proxy,采用 Docker Host 网络模式让 Broker 注册宿主机 IP,避开 Bridge 模式客户端连不上的坑。主从交叉部署保证单机故障不丢消息,附完整 broker 配置、启停顺序、ACL 2.0 权限、手动建 Topic 与常见问题排查。

fengquan8866的博客 1431

【完整实战】Docker Swarm 部署 RocketMQ 5.3.0 集群|开启 ACL 权限控制(多 Broker+Dashboard)

本文完整实战 Docker Swarm 模式部署 RocketMQ 5.3.0 集群,包含 1 个 NameServer、3 个 Broker 节点、RocketMQ‑Dashboard 控制台,开启 ACL 访问权限控制。提供全部可复制配置:plain_acl.yml、broker 配置、docker‑compose 编排文件,同时包含部署步骤、日常运维命令、常见问题排查。文档中 IP、账号密码均为示例,生产环境记得替换。

zhaojun917的专栏 315

RockeMQ ACL权限控制

查看官方文档。主要步骤有: plain_acl.yml 设置权限属性 broker.conf 设置 【aclEnable=true】 Client客户端通过 RPCHook注入AccessKey和SecretKey签名。 实操 下载【distribution/conf/plain_acl.yml配置文件】,根据文档描述到指定路径下下载plain_acl.yml文件。 文件路径: https://github.com/apache/rocketmq/tree/master/distribution/

Break a Leg 575

RocketMQ 客户端 org.apache.rocketmq:rocketmq-client:4.7.1

博文目录 文章目录准备依赖NameServer生产者编程模型消费者编程模型基本样例生产者代码演示消费者代码演示顺序消息生产者代码演示消费者代码演示广播消息生产者代码演示消费者代码演示延迟消息生产者代码演示消费者代码演示批量消息生产者代码演示消费者代码演示过滤消息生产者代码演示消费者代码演示 准备 依赖 <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketm

mrathena 2905

RocketMQ ACL实战指南:从零构建安全消息队列系统

本文详细介绍了RocketMQ ACL的实战配置与应用,涵盖权限控制、安全访问等核心功能。通过身份认证、权限隔离和风险防控三大机制,确保消息队列系统的安全性。文章提供了从基础配置到高级管控策略的完整指南,包括Broker配置、权限文件详解、客户端集成方案及故障排查方法,帮助开发者构建安全可靠的消息队列系统。

e1f2g的博客 352

java怎么控制台权限,RocketMQ控制台 权限控制(ACL)

权限控制(ACL)主要为RocketMQ提供Topic资源级别的用户访问控制。用户在使用RocketMQ权限控制时,可以在Client客户端通过 RPCHook注入AccessKey和SecretKey签名;同时,将对应的权限控制属性(包括Topic访问权限、IP白名单和AccessKey和SecretKey签名等)设置在distribution/conf/plain_acl.yml的配置文件中。...

weixin_39712705的博客 1001
上一篇: TI 高精度实验室 ADC 深度解析:Delta-Sigma与SAR架构的核心差异与应用场景
下一篇: 微信小程序云数据库实战:5分钟搞定用户登录注册+模糊查询(附完整代码)
devops8pract
博客等级 码龄4年 533粉丝 849原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值