Go微服务: 基于rocketmq:server和rocketmq:broker搭建RocketMQ环境,以及生产消息和延迟消费消息的实现

中间件实战指南:从核心原理到微服务架构落地 在分布式系统架构中,中间件作为连接操作系统与业务应用的关键基础设施,其核心价值在于通过标准化组件解决通信、集成与数据管理等共性问题。从技术原理上看,中间件通过解耦业务逻辑与横切关注点,实现了技术栈标准化与能力复用,从而提升系统的吞吐量、稳定性与开发效率。在工程实践中,消息队列(如Kafka、RocketMQ)和缓存(如Redis)等核心组件,分别通过异步解耦与内存加速机制,支撑了高并发场景下的数据流转与访问性能。针对缓存穿透、击穿、雪崩等经典问题,需结合布隆过滤器、分布式锁及过期时间随机化等策略进行防护。本 阅读详情

RocketMQ 的搭建


1 ) 配置 docker-compose.yaml 文件

version: '3.5'
services:
  rmqnamesrv:
    image: foxiswho/rocketmq:server
    container_name: rmqnamesrv
    ports:
      - 9876:9876
    volumes:
      - ./logs:/opt/logs
      - ./store:/opt/store
    networks:
      rmq:
        aliases:
          - rmqnamesrv

  rmqbroker:
    image: foxiswho/rocketmq:broker
    container_name: rmqbroker
    ports:
      - "10909:10909"
      - "10911:10911"
    volumes:
      - ./logs:/opt/logs
      - ./store:/opt/store
      - ./conf/broker.conf:/etc/rocketmq/broker.conf
    environment:
        NAMESRV_ADDR: "rmqnamesrv:9876"
        JAVA_OPTS: " -Duser.home=/opt"
        JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m"
    command: mqbroker -c /etc/rocketmq/broker.conf
    depends_on:
      - rmqnamesrv
    networks:
      rmq:
        aliases:
          - rmqbroker

  rmqconsole:
    image: styletang/rocketmq-console-ng
    container_name: rmqconsole
    ports:
      - "8080:8080"
    environment:
      JAVA_OPTS: "-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
    depends_on:
      - rmqnamesrv
    networks:
      rmq:
        aliases:
          - rmqconsole

networks:
  rmq:
    name: rmq
    driver: bridge

2 ) 配置文件 conf/broker.conf

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
brokerIP1=192.168.124.6
defaultTopicQueueNums = 4
autoCreateTopicEnable = true
autoCreateSubscriptionGroup = true
listenPort = 10911
deleteWhen = 04
fileReservedTime = 120
mapedfileSizeCommitLog = 1073741824
mapedfileSizeConsumeQueue=300000
diskMaxUsedSpaceRatio = 88
maxMessageSize=65536
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
  • 注意,需要指定 brokerIP1 且不能使用 0.0.0.0 也不能不指定,否则无法通信
  • fileReservedTime 默认是 48h

3 ) 拉取镜像

  • $ docker pull foxiswho/rocketmq:server
  • $ docker pull foxiswho/rocketmq:broker
  • $ docker pull styletang/rocketmq-console-ng

4 )启动和检查

  • 启动 $ docker compose up -d
  • 检查状态 $ docker compose ps

打开 UI 界面验证

  • 访问:http://127.0.0.1:8080

上面这个就是和上面的 brokerIP1 对应

编写程序验证生产和消费消息

  • 现在简述下场景
    • 生产5条消息
    • 10s 后进行消费

代码实现

package main

import (
	"context"
	"fmt"
	"log"
	"os"
	"strconv"
	"time"

	"github.com/apache/rocketmq-client-go/v2"
	"github.com/apache/rocketmq-client-go/v2/consumer"
	"github.com/apache/rocketmq-client-go/v2/primitive"
	"github.com/apache/rocketmq-client-go/v2/producer"
)

const groupName = "BBS_SHOP_GROUP_123"

func GetMqAddr() string {
	mqAddr := "127.0.0.1:9876" // 这里填入你的 NameServer 端口
	return mqAddr
}

func ProduceMsg(mqAddr string, topic string) {
	p, err := rocketmq.NewProducer( // 普通消息生产者
		producer.WithGroupName(groupName),
		producer.WithNsResolver(primitive.NewPassthroughResolver([]string{mqAddr})),
		producer.WithRetry(2),
	)
	if err != nil {
		panic(err)
	}
	err = p.Start()
	if err != nil {
		log.Fatal()
		fmt.Println("生产者错误: %v", err.Error())
		os.Exit(1)
	}
	for i := 0; i < 5; i++ {
		msg := &primitive.Message{
			Topic: topic,
			Body:  []byte("Hello XProjectOrder " + strconv.Itoa(i)),
		}
		msg.WithDelayTimeLevel(3)
		r, err := p.SendSync(context.Background(), msg)
		if err != nil {
			fmt.Println("发送消息错误: %v", err.Error())
		} else {
			fmt.Println("生产消息成功: " + r.String() + "-" + r.MsgID)
		}
	}
	err = p.Shutdown()
	if err != nil {
		fmt.Println("生产者shutdown: %v", err.Error())
		os.Exit(1)
	}
}

func ComsumeMsg(mqAddr string, topic string) {
	c, err := rocketmq.NewPushConsumer(
		consumer.WithGroupName(groupName),
		consumer.WithNsResolver(primitive.NewPassthroughResolver([]string{mqAddr})),
	)
	if err != nil {
		panic(err)
	}
	err = c.Subscribe(topic, consumer.MessageSelector{},
		func(ctx context.Context, msgList ...*primitive.MessageExt) (consumer.ConsumeResult, error) {
			for i := range msgList {
				fmt.Printf("订阅消息,消费%v \n", msgList[i])
			}
			return consumer.ConsumeSuccess, nil
		})
	if err != nil {
		fmt.Println("消费消息错误: %v", err.Error())
	}
	err = c.Start()
	if err != nil {
		fmt.Println("开启消费这错误: %v", err.Error())
	}
	time.Sleep(time.Hour)
	err = c.Shutdown()
	if err != nil {
		fmt.Println("shutdown消费者错误: %v", err.Error())
	}
}

func main() {
	topic := "BBS_SHOP_TOPIC_123"
	mqAddr := GetMqAddr()
	ProduceMsg(mqAddr, topic)
	ComsumeMsg(mqAddr, topic)
}
  • 以上是一个 demo,在真实场景,自行进行封装处理

  • 这里定义了一个 主题 BBS_SHOP_TOPIC_123 和 一个订阅组 BBS_SHOP_GROUP_123

  • 查看生产消息输出

    生产消息成功: SendResult [sendStatus=0, msgIds=C0A87C06209F0000000017eef7e80001, offsetMsgId=C0A87C0600002A9F0000000000000000, queueOffset=0, messageQueue=MessageQueue [topic=BBS_SHOP_TOPIC_123, brokerName=broker-bbs, queueId=1]]-C0A87C06209F0000000017eef7e80001
    生产消息成功: SendResult [sendStatus=0, msgIds=C0A87C06209F0000000017eef7e80002, offsetMsgId=C0A87C0600002A9F00000000000000DE, queueOffset=1, messageQueue=MessageQueue [topic=BBS_SHOP_TOPIC_123, brokerName=broker-bbs, queueId=2]]-C0A87C06209F0000000017eef7e80002
    生产消息成功: SendResult [sendStatus=0, msgIds=C0A87C06209F0000000017eef7e80003, offsetMsgId=C0A87C0600002A9F00000000000001BC, queueOffset=2, messageQueue=MessageQueue [topic=BBS_SHOP_TOPIC_123, brokerName=broker-bbs, queueId=3]]-C0A87C06209F0000000017eef7e80003
    生产消息成功: SendResult [sendStatus=0, msgIds=C0A87C06209F0000000017eef7e80004, offsetMsgId=C0A87C0600002A9F000000000000029A, queueOffset=3, messageQueue=MessageQueue [topic=BBS_SHOP_TOPIC_123, brokerName=broker-bbs, queueId=0]]-C0A87C06209F0000000017eef7e80004
    生产消息成功: SendResult [sendStatus=0, msgIds=C0A87C06209F0000000017eef7e80005, offsetMsgId=C0A87C0600002A9F0000000000000378, queueOffset=4, messageQueue=MessageQueue [topic=BBS_SHOP_TOPIC_123, brokerName=broker-bbs, queueId=1]]-C0A87C06209F0000000017eef7e80005
    
  • 查看消费 (10s 之后)

    订阅消息,消费[Message=[topic=BBS_SHOP_TOPIC_123, body=Hello XProjectOrder 0, Flag=0, properties=map[CONSUME_START_TIME:1717572747702 DELAY:3 MAX_OFFSET:1 MIN_OFFSET:0 REAL_QID:1 REAL_TOPIC:BBS_SHOP_TOPIC_123 UNIQ_KEY:C0A87C06209F0000000017eef7e80001], TransactionId=], MsgId=C0A87C06209F0000000017eef7e80001, OffsetMsgId=C0A87C0600002A9F0000000000000456,QueueId=1, StoreSize=221, QueueOffset=0, SysFlag=0, BornTimestamp=1717572737685, BornHost=172.30.0.1:46162, StoreTimestamp=1717572747694, StoreHost=192.168.124.6:10911, CommitLogOffset=1110, BodyCRC=407480418, ReconsumeTimes=0, PreparedTransactionOffset=0] 
    订阅消息,消费[Message=[topic=BBS_SHOP_TOPIC_123, body=Hello XProjectOrder 1, Flag=0, properties=map[CONSUME_START_TIME:1717572747706 DELAY:3 MAX_OFFSET:1 MIN_OFFSET:0 REAL_QID:2 REAL_TOPIC:BBS_SHOP_TOPIC_123 UNIQ_KEY:C0A87C06209F0000000017eef7e80002], TransactionId=], MsgId=C0A87C06209F0000000017eef7e80002, OffsetMsgId=C0A87C0600002A9F0000000000000533,QueueId=2, StoreSize=221, QueueOffset=0, SysFlag=0, BornTimestamp=1717572737698, BornHost=172.30.0.1:46162, StoreTimestamp=1717572747701, StoreHost=192.168.124.6:10911, CommitLogOffset=1331, BodyCRC=1867421940, ReconsumeTimes=0, PreparedTransactionOffset=0] 
    订阅消息,消费[Message=[topic=BBS_SHOP_TOPIC_123, body=Hello XProjectOrder 2, Flag=0, properties=map[CONSUME_START_TIME:1717572747710 DELAY:3 MAX_OFFSET:1 MIN_OFFSET:0 REAL_QID:3 REAL_TOPIC:BBS_SHOP_TOPIC_123 UNIQ_KEY:C0A87C06209F0000000017eef7e80003], TransactionId=], MsgId=C0A87C06209F0000000017eef7e80003, OffsetMsgId=C0A87C0600002A9F0000000000000610,QueueId=3, StoreSize=221, QueueOffset=0, SysFlag=0, BornTimestamp=1717572737702, BornHost=172.30.0.1:46162, StoreTimestamp=1717572747704, StoreHost=192.168.124.6:10911, CommitLogOffset=1552, BodyCRC=1984416078, ReconsumeTimes=0, PreparedTransactionOffset=0] 
    INFO[0010] update offset to broker success               MessageQueue="MessageQueue [topic=BBS_SHOP_TOPIC_123, brokerName=broker-bbs, queueId=0]" consumerGroup=BBS_SHOP_GROUP_123 offset=0
    订阅消息,消费[Message=[topic=BBS_SHOP_TOPIC_123, body=Hello XProjectOrder 3, Flag=0, properties=map[CONSUME_START_TIME:1717572747713 DELAY:3 MAX_OFFSET:1 MIN_OFFSET:0 REAL_QID:0 REAL_TOPIC:BBS_SHOP_TOPIC_123 UNIQ_KEY:C0A87C06209F0000000017eef7e80004], TransactionId=], MsgId=C0A87C06209F0000000017eef7e80004, OffsetMsgId=C0A87C0600002A9F00000000000006ED,QueueId=0, StoreSize=221, QueueOffset=0, SysFlag=0, BornTimestamp=1717572737706, BornHost=172.30.0.1:46162, StoreTimestamp=1717572747709, StoreHost=192.168.124.6:10911, CommitLogOffset=1773, BodyCRC=21035480, ReconsumeTimes=0, PreparedTransactionOffset=0] 
    INFO[0010] update offset to broker success               MessageQueue="MessageQueue [topic=BBS_SHOP_TOPIC_123, brokerName=broker-bbs, queueId=1]" consumerGroup=BBS_SHOP_GROUP_123 offset=1
    INFO[0010] update offset to broker success               MessageQueue="MessageQueue [topic=BBS_SHOP_TOPIC_123, brokerName=broker-bbs, queueId=2]" consumerGroup=BBS_SHOP_GROUP_123 offset=1
    INFO[0010] update offset to broker success               MessageQueue="MessageQueue [topic=BBS_SHOP_TOPIC_123, brokerName=broker-bbs, queueId=3]" consumerGroup=BBS_SHOP_GROUP_123 offset=1
    订阅消息,消费[Message=[topic=BBS_SHOP_TOPIC_123, body=Hello XProjectOrder 4, Flag=0, properties=map[CONSUME_START_TIME:1717572747717 DELAY:3 MAX_OFFSET:2 MIN_OFFSET:0 REAL_QID:1 REAL_TOPIC:BBS_SHOP_TOPIC_123 UNIQ_KEY:C0A87C06209F0000000017eef7e80005], TransactionId=], MsgId=C0A87C06209F0000000017eef7e80005, OffsetMsgId=C0A87C0600002A9F00000000000007CA,QueueId=1, StoreSize=221, QueueOffset=1, SysFlag=0, BornTimestamp=1717572737709, BornHost=172.30.0.1:46162, StoreTimestamp=1717572747711, StoreHost=192.168.124.6:10911, CommitLogOffset=1994, BodyCRC=522480763, ReconsumeTimes=0, PreparedTransactionOffset=0]
    
  • 以上就是生产和消费的主要过程

效果

总结

  • 以上是简单的环境搭建和生产消息,以及延迟消费消息的 demo 示例
  • 实际场景中,结合以上demo,对一些异步发送消息的场景进行灵活运用和升级
中间件技术全解析:从核心原理到高并发场景实战应用 在分布式系统与微服务架构中,中间件作为连接操作系统与应用软件的关键层,提供了通信、集成、数据管理等通用服务,是构建高可用、可扩展系统的技术基石。其核心原理在于通过抽象和标准化,将横跨多个应用的共性能力(如异步消息传递、数据缓存、安全认证)封装为可复用组件,从而让开发者能聚焦业务逻辑创新。这一设计带来了显著的技术价值:它实现了系统间的解耦,提升了开发效率,并保障了大规模分布式环境下的可靠性与性能。在应用场景上,中间件广泛应用于高并发请求处理、实时数据管道构建、服务治理与安全防护等领域。例如,Apache Ka 阅读详情

相关推荐

NATS与NSQ深度对比:从安全漏洞修复到架构选型实战解析

消息中间件是现代分布式系统的核心组件,负责在服务间可靠、高效地传递数据。其工作原理基于发布/订阅或队列模型,通过解耦生产者和消费者来提升系统可扩展性和弹性。在众多消息中间件中,轻量级、高性能的选项如NATS和NSQ,因其在延迟和吞吐量上的极致追求而备受关注。它们的技术价值在于为实时数据处理、微服务通信等场景提供了远超传统方案的性能表现。特别是在云原生和物联网领域,低延迟和高并发的需求使得这类组件的选型至关重要。本文围绕NATS最新版本的安全更新与性能优化,结合**CRITICAL级别漏洞**的修复实践,深入

weixin_30568591的博客 388

阿里云轻量服务器--Docker--RocketMq安装

RocketMQ支持多种消息模式,包括异步传输、同步传输和单向传输,并支持多种订阅模式,包括广播模式和集群模式。RocketMQ还提供了丰富的API和管理工具,可以轻松地进行消息的发送、订阅和管理。-多样化的API和管理工具:RocketMQ提供了多样化的API和管理工具,方便用户进行消息发送、订阅和管理。多种订阅模式:RocketMQ支持广播模式和集群模式,可以根据具体需求选择合适的订阅模式。同步和异步传输:RocketMQ支持同步和异步传输两种方式,根据业务需要选择合适的方式。

拽着尾巴的鱼儿的博客 2950

从单体到SOA:真实业务系统架构演化的七次关键跃迁

面向服务架构(SOA)不是技术堆砌,而是应对业务增长中部署摩擦、性能瓶颈、协作低效与变更失控等现实问题的系统性解法。其核心原理在于以业务能力为边界进行垂直切分,通过领域驱动设计(DDD)识别限界上下文,并借助消息队列(MQ)、服务运行时(SR)、契约即代码等轻量机制实现松耦合与最终一致性。这种演进路径强调落地代价可控、治理指标可度量,技术价值体现在缩短交付周期、提升故障隔离率与降低跨团队协同成本。典型应用场景包括高并发电商订单系统、多团队并行的SaaS平台及需快速迭代的本地生活服务系统。本文聚焦真实系统从A

baochuanying9531的博客 341

RocketMQ | Docker安装RocketMQ详细教程(foxiswho/rocketmq:4.8.0)

RocketMQ | Docker安装RocketMQ详细教程(foxiswho/rocketmq:4.8.0)

慌途L 3200

大数据Hadoop运维应用实践——大数据平台架构_kafka入门与实践

本文介绍了大数据平台中Kafka分布式消息队列的原理、架构与集群部署实践。首先详细解析了Kafka的核心概念、特性和适用场景,包括其高吞吐、持久化存储、分布式等优势,以及与其他主流消息中间件的对比。随后,文章提供了三节点Kafka集群的完整部署方案,涵盖ZooKeeper集群配置、Kafka参数优化、systemd服务集成等关键步骤。最后给出了Kafka基础命令操作示例,帮助读者快速掌握集群管理技能。生产环境推荐采用Kafka 3.9.2 + ZooKeeper 3.9.5 + OpenJDK17的组合

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 150

【信息科学与工程学】【数据中心】第三十三篇 云数据中心综合解决方案探讨04

的计算/存储/网络/安全/互相访问设计的计算/存储/网络/安全设计的计算/存储/网络/安全设计编号类型问题(计算机系统架构/网络架构/信息架构/业务架构/组织架构/管理架构)问题的数学分析(方程/算法+求解器)参数列表时序与稳态/非稳态分析关联知识(工具/工艺)互联网接入区/DMZ区 等(含详细资源规划、互相访问限制、安全设计、网络配置、软件策略、算法策略与算法详细设计;;设计的完整代码(示例)多/双/单Region+AZ(含详细资源规划与配置设计)A276​ (基于。

weixin_49199313的博客 3557

docker 安装 foxiswho/rocketmq

docker 安装 rocketmq

weixin_47371588的博客 1316

【信息科学与工程学】计算机科学与自动化——第三百零四篇 高性能系统开发指南01

高并发:限流、熔断、降级高性能:红包拆分、多级缓存、大Key/热Key拆分、Pipeline、线程池、RocketMQ零丢失、幂等、分布式锁、集群缩容、分批入库海量数据处理:日志分表分片、跨表查询、冷热分层、大数据引擎服务器选型系统安全:网关安全、服务器安全、云存储安全、风控、监控、测试数据一致性:缓存与数据库一致性、大厂方案、蓝绿回滚、流量一致性、流程一致性项目与团队管理:流程问题、管理问题(风险、成本、人员、文档、培训)稳定性建设:上线三板斧、线上五步闭环、混沌工程、容量规划。

weixin_49199313的博客 249

RocketMQ集群搭建

目录 1、机器环境 2、创建用户 3、系统配置 3.1 免密登录 3.2 关闭防火墙 4、安装java 5、安装RocketMQ 6、配置RocketMQ集群 6.1 配置第一组broker-a 6.2 配置第二组Broker-b 7、启动RocketMQ 7.1 先启动nameServer。 7.2 再启动broker 7.3 启动状态检查 7.4 测试mqadmin管理工具 7.4.1 Topic相关: 7.4.2 集群相关 7.4.3 Broker相关 7..

Xx__WangQi的博客 924

从配置文件加载顺序揭秘:为什么你的logback.xml读不到application.yml?

本文深入解析了Spring Boot中logback.xml无法读取application.yml配置的原因,揭示了Spring Boot配置加载机制与日志系统初始化的时序问题。通过对比logback.xml与logback-spring.xml的差异,提供了使用springProperty标签和系统属性传递等解决方案,帮助开发者有效解决日志配置问题。

weixin_29214335的博客 364

nRF52811墨水屏时钟DIY:从全刷到局刷的实战改造指南(附完整代码)

本文详细介绍了如何将基于nRF52811的墨水屏时钟从耗电的全屏刷新模式改造为高效的局部刷新模式。通过剖析全刷与局刷的原理差异,提供了从工程架构、驱动层适配到应用层逻辑重构的完整实战指南,并附上关键代码示例。改造后,设备功耗显著降低,续航大幅提升,同时解决了视觉闪烁问题,是DIY低功耗墨水屏应用的实用参考。

weixin_29194693的博客 354

docker部署rocketmq(亲测有效)

docker安装,部署rocketmq

q365807701的博客 7241

R语言TCGA数据下载避坑指南:biolinks包实战中的5个常见错误与解决方案

本文详细介绍了使用R语言的TCGAbiolinks包下载TCGA数据时常见的5个错误及其解决方案,包括安装与加载问题、查询构建参数设置、下载中断处理、数据加载格式不匹配以及版本兼容性问题。通过实战案例和代码示例,帮助生物信息学研究者高效获取TCGA数据,避免常见陷阱。

weixin_30892037的博客 84

Kafka核心原理与应用实践:从消息积压到高吞吐分布式系统

在分布式系统架构中,消息队列是解耦生产者和消费者、应对流量洪峰的关键组件。其核心原理在于通过异步通信机制,将数据生产与消费过程分离,从而提升系统整体的可扩展性和容错能力。从技术价值看,这种设计不仅能够有效缓冲数据流量,还能支持多消费者并行处理,为实时数据处理和事件驱动架构奠定基础。在实际应用场景中,消息队列常被用于构建日志聚合管道、实时流处理平台的数据源,以及微服务间的异步通信桥梁。以Kafka为例,它通过分区(Partition)机制和零拷贝(Zero-Copy)技术,实现了高吞吐和低延迟的数据传输,特别

weixin_34345753的博客 355

vmware vsphere5---部署vCSA(VMware vCenter Server)附带第二阶段安装报错解决方案

因为这份文档我是边做边写的,遇到问题重新装了好几次所以IP会很乱ESXI主机为192.168.20.10VCSA为192.168.20.7,后台为192.168.20.7:5480后期请自行对应,后面的192.168.20.57请对应192.168.20.7,或根据自己的来。

m0_70212665的博客 5714

用Matlab搞定Delta并联机器人运动学:从建模到正逆解完整流程(附代码)

本文详细介绍了如何使用Matlab实现Delta并联机器人的运动学分析,包括几何建模、正逆解求解及可视化验证。通过符号计算和数值迭代法,解决非线性方程组问题,并提供完整代码示例,帮助读者快速掌握Delta机器人的运动学计算与应用。

weixin_30955617的博客 177

Golang基础面试题汇总

channel、goroutine、slice、map、反射、内存、GC、Musql、Redis、ELK、K8s、Http、Https

weixin_41760738的博客 5696

【2023年】云计算比赛——金砖挑战赛正式题

文章摘要 本文详细记录了OpenStack私有云平台与Kubernetes容器云平台的部署与运维过程,涵盖环境初始化、组件安装、服务配置及自动化运维等关键任务。主要内容包括: OpenStack部署 环境初始化(主机名、Yum源、FTP服务等) 核心组件安装(Keystone、Glance、Nova、Neutron等) 运维任务(安全组管理、镜像上传、存储服务配置等) Kubernetes集群搭建 节点配置(时间同步、免密登录) 容器运行时(Docker)与网络插件(Flannel)部署 Harbor私有仓

geekgold的博客 313

goalng开发_开发篇

Go 面试,基础知识

qq_46640341的博客 1159

基于Python的Booking酒店数据爬虫实战:最新技术与完整代码解析

本文将详细介绍如何使用Python构建一个高效的Booking酒店数据爬虫,涵盖从基础爬取到高级反反爬技术的完整实现。我们将使用最新的Python爬虫技术栈,包括requests-html、Playwright、智能代理轮换等技术,并提供完整的可运行代码示例。文章将深入探讨爬虫的各个组成部分,包括数据提取、存储、反反爬策略以及性能优化等方面。关键词:Python爬虫、Booking数据采集、反反爬技术、Playwright、数据存储。

2201_76125261的博客 936

手把手教你学simulink实例--基于Simulink的船舶动力定位系统建模与仿真

船舶动力定位系统(Dynamic Positioning System, DPS)是一种通过控制推进器来保持船舶在指定位置和航向的技术。它广泛应用于海上钻井平台、海洋调查船、起重船等需要精确位置控制的场景。DPS的核心任务是实时感知环境干扰(如风、浪、流),并通过闭环控制算法调整推进器输出,以抵消外界扰动并维持船舶的位置和姿态。本项目旨在基于MATLAB/Simulink平台,构建船舶动力定位系统的数学模型,并进行仿真分析,验证其性能和稳定性。

MHD0815的博客 1083

中间件:分布式系统的交通枢纽与核心组件实战解析

在分布式系统架构中,中间件作为连接应用与基础设施的关键组件,其核心价值在于解耦、复用与标准化。从原理上看,中间件通过提供标准接口和协议,将业务逻辑与底层技术细节分离,例如消息队列实现异步通信,缓存加速数据访问。其技术价值在于提升系统扩展性、可靠性和开发效率,是构建高可用、高性能系统的基石。应用场景广泛,涵盖服务通信、数据管理、系统协调等,例如API网关统一入口、Redis缓存热点数据、Nacos实现服务发现。本文聚焦于中间件的核心思想、主流组件(如Kafka、Redis)的深度解析,并结合部署配置与生产运维

chongyuwan4121的博客 487

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

并行分布式框架:Celery、rq、funboost

Celery是一个异步任务的调度工具,也可以叫做 "分布式任务队列(Distributed Task Queue)"。

freeking101的博客 5万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

开发和测试主流技术栈速查指南

本文采用“主流/常见/适合”这类稳健表达,不写死容易过期的具体版本号。技术选型应结合团队经验、业务规模、合规要求、预算、现有系统和维护成本,不建议只按流行度决策。测试技术栈不应只覆盖 UI 自动化,应同时覆盖单元测试、接口测试、集成测试、契约测试、性能测试、安全测试、数据验证和可观测性。AI 编程助手适合提升效率,但生成代码、测试用例、SQL、正则、配置和安全策略必须经过人工复核。高风险场景包括认证授权、支付、权限、数据删除、数据库迁移、批量任务、消息补偿、生产配置和回滚策略。

KeepJoy的博客 434

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【2026年9月】最新计算机专业面试八股文(全体系总结)

本八股文适配2026年春招/秋招/社招最新面试趋势,覆盖通用基础、主流开发专项、工程架构、前沿技术、算法核心五大核心模块,标注高频考点与2026年新增超高频考点,兼顾系统性、应试性与实战落地性。

小江的记录本 1万+

系统优雅关闭:从概念到实践,构建健壮服务的暂停键

在软件工程中,系统生命周期管理是保障服务稳定性的基础,其中优雅关闭(Graceful Shutdown)是实现平滑终止的关键技术。其核心原理在于,当系统收到停止指令时,并非立即中断,而是通过信号捕获、流量摘除、等待进行中请求完成及资源清理等一系列有序步骤,确保业务连续性与数据一致性。这项技术的价值在于能有效避免数据丢失、状态不一致和资源泄漏,是构建高可用、可维护系统的基石。在微服务、云原生及分布式事务等应用场景中,优雅关闭与健康检查、服务发现、负载均衡紧密协同,是实现无缝部署、滚动升级和故障恢复的重要保障。

weixin_30800987的博客 639
上一篇: Go微服务: 关于消息队列的选择和分类以及使用场景
下一篇: Go微服务: 基于rocketmq:5.2.0搭建RocketMQ环境,以及示例参考
Wang's Blog
博客等级 码龄12年 7418粉丝 2407原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值