show-cloud(十一)添加删除帐套的mq队列

本文详细介绍了如何使用RabbitMQ进行队列配置,包括依赖添加、队列监听类的创建,以及如何实现队列中日志数据的消费处理,特别聚焦于帐套删除操作的日志处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步:配置队列
在这里插入图片描述
第二步:确认队列是否创建,登陆到rabbitMq的web管理界面
在这里插入图片描述

第三步:对show-cloud-users-service添加相应对依赖

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

第四步:添加mq处理类,也就是队列监听
在这里插入图片描述

package org.go.show.users.rabitMqHandler;

import lombok.extern.slf4j.Slf4j;
import org.go.show.common.constants.LogQueue;
import org.go.show.users.i.AccountService;
import org.go.show.users.pojo.Account;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * 从mq队列消费日志数据
 *
 *
 */
@Component
@Slf4j
public class RabitMqHandler {


	@Value("${goshow.log.logServiceBean:logServiceDBImpl}")
	String logServiceBean;

	@Autowired
	AccountService accountService;


	/**
	 * 监听帐套删除队列
	 *
	 * @param accountId
	 */
	@RabbitHandler
	@RabbitListener(queues = LogQueue.DEL_ACCOUNT_QUEUE) // 监听队列
	public void delAccountHandler(String accountId) {
		try {
			accountService.delAccountRelInfo(accountId);
		} catch (Exception e) {
			log.error("删除帐套操作,日志:{},异常:{}", accountId, e);
		}
	}
}

第五步:实现关联信息的删除操作。

<think>我们正在处理一个技术问题列表,需要逐一回答用户提出的问题。用户的问题涉及多个技术领域:Linux命令、Vue3、Redis、RabbitMQ、SQL优化、MySQL、Spring Cloud和多线程。我们将按照清晰的结构回答每个问题,并在适当位置添加引用标识。 注意:根据系统级指令,行内数学表达式用$...$,独立公式用$$...$$,但由于这些问题主要是技术概念,可能数学公式较少,如果有则按规则处理。同时,每个回答末尾要生成相关问题。 由于问题较多,我们将逐个回答,每个问题单独成段,并保持回答简洁准确。 开始回答:</think>### Linux查看目录占用内存命令 Linux中查看目录占用内存(实际为磁盘空间)的命令是`du`(disk usage)。常用组合: - `du -sh <目录路径>`:显示目录总大小(-s汇总,-h人类可读格式),如`du -sh /var/log`[^1]。 - `du -ah <目录路径>`:显示目录下所有文件/子目录的大小(-a包含文件)。 - `du --max-depth=1 -h <目录路径>`:限制子目录深度查看。 --- ### Vue3生命周期钩子函数 Vue3组合式API中的主要生命周期钩子(兼容选项式API): 1. **`setup()`**:替代`beforeCreate`和`created`,组件初始化时执行。 2. **`onBeforeMount`/`onMounted`**:DOM挂载前/后。 3. **`onBeforeUpdate`/`onUpdated`**:数据更新前/后。 4. **`onBeforeUnmount`/`onUnmounted`**:组件销毁前/后。 5. **`onErrorCaptured`**:捕获子组件错误。 ```javascript import { onMounted } from 'vue'; setup() { onMounted(() => { console.log('组件已挂载'); }); } ``` --- ### Redis RDB和AOF机制 - **RDB(快照持久化)**: 定时生成内存数据的二进制快照(`dump.rdb`),通过`save`或`bgsave`触发。 **优点**:文件小,恢复快。**缺点**:可能丢失最后一次快照后的数据。 - **AOF(追加日志)**: 记录每个写操作命令(文本格式),支持每秒同步(`appendfsync everysec`)或始终同步。 **优点**:数据完整性高。**缺点**:文件大,恢复慢。 **混合模式**(Redis 4.0+):结合两者,AOF日志包含RDB头部,兼顾效率与安全[^2]。 --- ### Redis内存满处理 当内存达`maxmemory`限制时,Redis根据`maxmemory-policy`策略处理: 1. **`noeviction`**(默认):拒绝新写入,只读。 2. **`allkeys-lru`**:淘汰最近最少使用的键。 3. **`volatile-lru`**:仅淘汰设过期时间的LRU键。 4. **`allkeys-random`**/`volatile-random`:随机淘汰键。 5. **`volatile-ttl`**:优先淘汰剩余生存时间短的键。 **建议**:设置过期时间 + 监控内存使用(`INFO memory`)。 --- ### RabbitMQ组成结构 RabbitMQ核心组件: 1. **Producer**:消息生产者,通过`Exchange`发送消息。 2. **Exchange**:接收消息并按规则路由到队列(类型:`direct`, `topic`, `fanout`, `headers`)。 3. **Queue**:存储消息的缓冲区。 4. **Consumer**:消息消费者,从队列获取消息。 5. **Binding**:定义Exchange与Queue的绑定规则(如路由键`routing_key`)。 6. **Channel**:复用TCP连接的轻量级通信管道。 7. **Broker**:RabbitMQ服务实例,管理上述组件[^3]。 --- ### RabbitMQ业务应用场景 1. **异步任务处理**:Web应用将耗时任务(如邮件发送)发到队列,后端异步消费。 2. **系统解耦**:订单系统与库存系统通过消息通信,避免直接依赖。 3. **流量削峰**:突发流量写入队列,后端按处理能力消费。 4. **日志收集**:多服务发送日志到队列,统一由日志处理服务消费。 --- ### 消息唯一性保障 **幂等性设计**防止重复消费: 1. **唯一ID**:生产者生成全局唯一消息ID(如UUID),消费者记录已处理ID(存储到Redis/DB)。 2. **数据库唯一约束**:业务关键字段(如订单ID)加唯一索引,重复插入会失败。 3. **版本号/状态机**:更新数据时校验版本号,如`update table set status=new_status where id=xxx and version=old_version`。 --- ### SQL调优依据 1. **执行计划分析**: - MySQL:`EXPLAIN`查看扫描类型(`ALL`全表扫 → 需索引)、索引使用情况。 - 关注`rows`(扫描行数)、`Extra`(是否含`Using filesort`)。 2. **慢查询日志**:记录超过`long_query_time`的SQL,定位瓶颈点。 3. **系统监控**:CPU、I/O、锁竞争(`SHOW STATUS LIKE 'innodb_row_lock%'`)。 --- ### 索引类型(以MySQL为例) 1. **B+Tree索引**:默认索引,支持范围查询和排序。 2. **哈希索引**:精确匹配快(如`MEMORY`引擎),不支持范围查询。 3. **全文索引**:文本搜索(`MATCH AGAINST`),适用于`TEXT`类型。 4. **空间索引**:地理数据(`GEOMETRY`类型)。 5. **组合索引**:多列联合索引,需注意**最左前缀原则**。 --- ### MySQL锁机制 1. **全局锁**:`FLUSH TABLES WITH READ LOCK`,全库只读(备份用)。 2. **表级锁**: - 表锁:`LOCK TABLES ... READ/WRITE`。 - 元数据锁(MDL):隐式锁,维护表结构一致性。 3. **行级锁**(InnoDB): - 记录锁(Record Lock):锁定单行。 - 间隙锁(Gap Lock):锁定范围,防止幻读。 - 临键锁(Next-Key Lock):记录锁+间隙锁组合。 --- ### Spring Cloud常用组件 | 组件 | 功能 | |---------------------|-------------------------------| | **Eureka** | 服务注册与发现 | | **Ribbon** | 客户端负载均衡 | | **Feign** | 声明式HTTP客户端 | | **Hystrix** | 服务熔断与降级(已停更) | | **Gateway** | API网关路由与过滤 | | **Config** | 分布式配置中心 | | **Sleuth** + **Zipkin** | 分布式链路追踪 | --- ### 多线程作用 1. **提升CPU利用率**:并行计算充分利用多核CPU。 2. **异步处理**:避免阻塞主线程(如UI线程响应+后台任务)。 3. **高并发响应**:Web服务器用线程池处理并发请求。 4. **任务分解**:大任务拆解为子任务并行执行(如MapReduce)。 --- ### 线程常用参数(Java示例) 创建线程池(`ThreadPoolExecutor`)核心参数: ```java new ThreadPoolExecutor( int corePoolSize, // 核心线程数(常驻) int maximumPoolSize, // 最大线程数 long keepAliveTime, // 非核心线程空闲存活时间 TimeUnit unit, // 时间单位 BlockingQueue<Runnable> workQueue, // 任务队列(如ArrayBlockingQueue) RejectedExecutionHandler handler // 拒绝策略(如AbortPolicy) ); ``` **拒绝策略**: - `AbortPolicy`:默认,抛出异常。 - `CallerRunsPolicy`:调用者线程执行任务。 - `DiscardOldestPolicy`:丢弃队列最旧任务。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值