当前位置: 首页 > news >正文

做相似网站求推荐个网站

做相似网站,求推荐个网站,wordpress 分类调用,关键词优化排名软件s一、简单步骤 实现Canal监控Binlog日志#xff0c;并通过消息队列进行异步处理#xff0c;步骤如下#xff1a; 配置Canal#xff1a;首先#xff0c;需要配置Canal进行Binlog日志监控。可以通过Canal的官方文档了解如何配置Canal。 连接到Canal#xff1a;使用Canal客户…一、简单步骤 实现Canal监控Binlog日志并通过消息队列进行异步处理步骤如下 配置Canal首先需要配置Canal进行Binlog日志监控。可以通过Canal的官方文档了解如何配置Canal。 连接到Canal使用Canal客户端连接到Canal服务器订阅需要监控的数据库和表。 监听Binlog事件通过Canal客户端监听Canal服务器发送的Binlog事件。可以通过设置监听器来处理不同类型的Binlog事件。 将事件发送到消息队列一旦监听到Binlog事件可以将事件转化为消息并发送到消息队列进行异步处理。可以选择使用Kafka、RabbitMQ、ActiveMQ等消息队列。 消息处理在消息队列中可以编写消费者程序来处理接收到的消息。根据消息的类型和内容可以执行相应的操作例如更新数据库生成报告等。 确保处理的幂等性在处理消息时需要注意幂等性。即同一条消息可以被处理多次但最终结果应该是一致的。 监控和错误处理在整个过程中需要监控消息队列的状态并进行错误处理。例如如果消息队列出现故障可能需要重新连接或存储未处理的消息。 二、Binlog使用 Binlog是MySQL数据库的二进制日志用于记录数据库的更改操作。它可以用于数据恢复、主从复制、数据备份和恢复等场景。以下是有关Binlog的一些常见用法 数据恢复通过分析Binlog可以还原数据库到某个特定的时间点或事务提交后的状态。这在意外删除或误操作后恢复数据非常有用。 主从复制通过将Binlog从主数据库复制到从数据库可以实现主数据库的实时同步。这可以用于横向扩展读操作、数据备份和故障恢复。 数据备份和恢复可以使用Binlog进行增量备份和恢复只记录变更的部分而不需要完全备份整个数据库。 数据审计和追踪分析Binlog可以了解数据库的操作历史包括谁在何时执行了哪些操作。这对于安全审计和数据追踪非常有用。 数据更改追踪和同步通过解析Binlog可以捕获和同步数据库的更改以便在其他系统或数据仓库中进行进一步处理和分析。 要使用Binlog首先需要在MySQL服务器上启用Binlog功能。可以在MySQL配置文件中设置以下参数 log-binmysql-bin binlog-formatROW其中log-bin指定Binlog日志文件的名称前缀binlog-format指定Binlog的格式为行格式。 启用Binlog后MySQL将开始记录所有的更新操作到Binlog中。可以使用MySQL提供的工具如mysqlbinlog来解析和分析Binlog文件。还可以使用第三方工具如Canal来实时监控和解析Binlog以便进行异步处理或其他操作。 需要注意的是Binlog日志会占用磁盘空间因此需要定期进行清理和归档以避免过多的日志文件导致磁盘空间不足。 三、canal使用 Canal是一款开源的基于Java的MySQL数据库增量订阅消费组件它可以帮助我们实时监控MySQL的Binlog日志并将数据推送到消息队列中进行异步处理。以下是使用Canal的一般步骤 下载和安装Canal首先需要从Canal的官方网站或Github上下载Canal的安装包然后解压到指定的目录中。 配置CanalCanal需要配置MySQL的相关信息如主机地址、端口、用户名、密码等以便连接到MySQL数据库。配置文件位于Canal安装目录下的conf文件夹中主要包括canal.properties和instance.properties两个文件。其中canal.properties是全局配置文件而instance.properties是实例级别的配置文件可以配置多个实例。 启动Canal Server通过运行Canal Server的启动脚本如startup.sh或startup.bat启动Canal Server进程。 创建Canal实例使用Canal提供的命令行工具或API创建一个Canal实例指定要订阅和监控的数据库和表。 消费Binlog事件通过连接到Canal Server订阅和消费Binlog事件。Canal可以将Binlog事件推送到Kafka、RocketMQ等消息队列中供后续的异步处理。 四、Rabbit结合canal更新Redis缓存示例 通过canal 监控更新 Redis 缓存或者触发RabbitMQ发送消息示例 import com.alibaba.fastjson.JSON; import com.alibaba.otter.canal.client.CanalConnector; import com.alibaba.otter.canal.client.CanalConnectors; import com.alibaba.otter.canal.protocol.CanalEntry; import com.alibaba.otter.canal.protocol.Message; import com.rabbitmq.client.*; import redis.clients.jedis.Jedis;import java.io.IOException; import java.net.InetSocketAddress; import java.nio.channels.Channel; import java.sql.Connection; import java.util.List;public class RabbitCanalRedisExample {private static final String RABBITMQ_QUEUE_NAME canal_redis_queue;private static final String RABBITMQ_HOST localhost;private static final int RABBITMQ_PORT 5672;private static final String CANAL_HOST localhost;private static final int CANAL_PORT 11111;private static final String REDIS_HOST localhost;private static final int REDIS_PORT 6379;public static void main(String[] args) throws Exception {// 连接 RabbitMQConnectionFactory factory new ConnectionFactory();factory.setHost(RABBITMQ_HOST);factory.setPort(RABBITMQ_PORT);Connection connection factory.newConnection();Channel channel connection.createChannel();channel.queueDeclare(RABBITMQ_QUEUE_NAME, false, false, false, null);// 连接 CanalCanalConnector connector CanalConnectors.newSingleConnector(new InetSocketAddress(CANAL_HOST, CANAL_PORT), example, , );connector.connect();connector.subscribe(.*\\..*);connector.rollback();// 连接 RedisJedis jedis new Jedis(REDIS_HOST, REDIS_PORT);while (true) {// 从 Canal 获取消息Message message connector.getWithoutAck(100);long batchId message.getId();int size message.getEntries().size();if (batchId -1 || size 0) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}// 确认消息已处理connector.ack(batchId);continue;}// 遍历 Canal 消息for (CanalEntry.Entry entry : message.getEntries()) {if (entry.getEntryType() ! CanalEntry.EntryType.ROWDATA) {continue;}try {// 解析 Canal 消息CanalEntry.RowChange rowChange CanalEntry.RowChange.parseFrom(entry.getStoreValue());for (CanalEntry.RowData rowData : rowChange.getRowDatasList()) {if (rowChange.getEventType() CanalEntry.EventType.INSERT) {// 处理新增数据String tableName entry.getHeader().getTableName();String key rowData.getAfterColumnsList().stream().filter(c - c.getIsKey()).findFirst().get().getValue();// 更新 Redis 缓存jedis.set(tableName _ key, JSON.toJSONString(rowData.getAfterColumnsList()));// 发送消息到 RabbitMQchannel.basicPublish(, RABBITMQ_QUEUE_NAME, null, key.getBytes());} else if (rowChange.getEventType() CanalEntry.EventType.DELETE) {// 处理删除数据String tableName entry.getHeader().getTableName();String key rowData.getBeforeColumnsList().stream().filter(c - c.getIsKey()).findFirst().get().getValue();// 删除 Redis 缓存jedis.del(tableName _ key);// 发送消息到 RabbitMQchannel.basicPublish(, RABBITMQ_QUEUE_NAME, null, key.getBytes());} else if (rowChange.getEventType() CanalEntry.EventType.UPDATE) {// 处理更新数据String tableName entry.getHeader().getTableName();String key rowData.getAfterColumnsList().stream().filter(c - c.getIsKey()).findFirst().get().getValue();// 更新 Redis 缓存jedis.set(tableName _ key, JSON.toJSONString(rowData.getAfterColumnsList()));// 发送消息到 RabbitMQchannel.basicPublish(, RABBITMQ_QUEUE_NAME, null, key.getBytes());}}} catch (IOException e) {e.printStackTrace();}}}// 确认消息已处理connector.ack(batchId);} }这个示例代码实现了以下功能 使用 Canal 连接到 MySQL 数据库并订阅所有表。使用 RabbitMQ 队列接收并发送消息。使用 Redis 缓存数据。根据 Canal 消息的类型进行相应操作新增数据时在 Redis 中保存数据并发送消息到 RabbitMQ删除数据时从 Redis 中删除数据并发送消息到 RabbitMQ更新数据时更新 Redis 中的数据并发送消息到 RabbitMQ。 区分场景也可以先发送消息通过消息触发缓存更新好处有以下几点 异步操作将更新缓存的操作写入消息队列后在实际更新缓存的过程中不会阻塞应用程序的执行。应用程序可以继续处理其他的业务逻辑而不必等待缓存更新完成。这样可以提高应用程序的响应速度和吞吐量。 并发控制通过消息队列可以实现缓存更新的并发控制。当多个请求同时更新缓存时可以通过消息队列的先进先出原则确保每个更新操作按照顺序进行避免了并发操作导致的数据不一致问题。 可靠性消息队列可以提供消息的持久化机制即使在消息队列出现故障或重启的情况下更新缓存的消息不会丢失。这样可以提高缓存更新的可靠性和数据完整性。 扩展性通过消息队列可以将缓存更新的任务分发到多个消费者进行处理实现任务的并行处理提高系统的扩展性和负载能力。 总的来说使用消息队列更新缓存可以实现异步操作、并发控制、可靠性和扩展性提高系统的性能和可靠性。
http://www.w-s-a.com/news/353760/

相关文章:

  • flash 网站欣赏国外做的比较好的网站有哪些
  • 推广一个网站需要什么官网首页设计
  • 淘宝建设网站的理由企业官网建设哪家好
  • 青岛网站推wordpress主题切换
  • 天元建设集团有限公司资质郑州网站seo推广
  • 免费网站后台管理系统模板下载百度网盘app下载安装
  • 开封网站建设培训郑州高端网站建设哪家好
  • 东莞哪家做网站很有名的公司即墨专业医院网站制作公司
  • 做面食网站china cd wordpress
  • 门户网站 营销优秀建筑模型案例作品
  • 训做网站的心得体会范文中山市 有限公司网站建设
  • 服装电子商务网站建设过程与实现两学一做学习教育网站
  • 住房和城建设网站怎么用源码建站
  • 监理工程师证查询网站百度关键词优化软件网站
  • 关于建筑建设的网站asp网站建设报告书
  • 服务二级公司网站建设平台销售模式有哪些
  • 南昌县建设局网站微信分销小程序开发
  • 网站设计师需要什么知识与技能wordpress个性
  • 做茶叶网站的目的和规划有什么做照片书的网站
  • 开福区城乡建设局门户网站关键词挖掘查询工具爱站网
  • 网站建设全国排名沈阳seo按天计费
  • 成都公司网站设计无锡seo网站推广费用
  • 建网站平台要多少钱购物网站界面设计策划
  • 学完js了可以做哪些网站长沙建站官网
  • 怎么样做问卷网站多少钱英语
  • 房产网站建设方案建筑公司是干什么的
  • wordpress建的大型网站柳州市网站建设
  • 石家庄做网站的公司有哪些微信自媒体网站建设
  • 池州哪里有做网站注册公司有哪些风险
  • 做古代风格头像的网站对网站政务建设的建议