CanalListener.java 2.2 KB
Newer Older
1
package com.youlai.admin.component.listener;
有来技术 已提交
2

3 4 5 6 7 8
import cn.hutool.json.JSONUtil;
import com.youlai.admin.service.ISysMenuService;
import com.youlai.admin.service.ISysOauthClientService;
import com.youlai.admin.service.ISysPermissionService;
import com.youlai.common.domain.CanalMessage;
import lombok.RequiredArgsConstructor;
有来技术 已提交
9 10 11 12 13 14 15
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

16
import java.util.Arrays;
有来技术 已提交
17 18

/**
19 20
 * Canal + RabbitMQ 监听数据库数据变化
 *
有来技术 已提交
21 22 23 24 25
 * @author <a href="mailto:xianrui0365@163.com">haoxr</a>
 * @date 2021/11/4 23:14
 */
@Component
@Slf4j
26
@RequiredArgsConstructor
有来技术 已提交
27 28
public class CanalListener {

29 30 31 32
    private final ISysPermissionService permissionService;
    private final ISysOauthClientService oauthClientService;
    private final ISysMenuService menuService;

有来技术 已提交
33 34 35 36 37 38 39 40
    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue(value = "canal.queue", durable = "true"),
                    exchange = @Exchange(value = "canal.exchange"),
                    key = "canal.routing.key"
            )
    })
    public void handleDataChange(String message) {
41 42
        CanalMessage canalMessage = JSONUtil.toBean(message, CanalMessage.class);
        String tableName = canalMessage.getTable();
有来技术 已提交
43

44 45 46 47 48 49 50 51 52 53 54 55 56
        log.info("Canal 监听 {} 发生变化;明细:{}", tableName, message);

        if ("sys_oauth_client".equals(tableName)) {
            log.info("======== 清除客户端信息缓存 ========");
            oauthClientService.cleanCache();
        } else if (Arrays.asList("sys_permission", "sys_role", "sys_role_permission").contains(tableName)) {
            log.info("======== 刷新角色权限缓存 ========");
            permissionService.refreshPermRolesRules();
        } else if (Arrays.asList("sys_menu", "sys_role", "sys_role_menu").contains(tableName)) {
            log.info("======== 清理菜单路由缓存 ========");
            menuService.cleanCache();
        }
    }
有来技术 已提交
57
}