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

AMQP + mysql + REST API 分布式系统和微服务架构

你提到的技术栈包括 AMQP、MySQL、REST API 和文件系统日志记录,这是一个功能强大且常见的架构组合,用于构建可靠、可扩展的分布式系统。以下是如何整合这些组件以实现一个典型的应用架构。

架构概述
AMQP:

用于异步消息传递,实现不同服务之间的松耦合通信。RabbitMQ 是一个常用的 AMQP 实现。
MySQL:

关系型数据库,用于持久化业务数据。MySQL 是可靠性和性能的不错选择。
REST API:

用于提供接口,使外部系统和用户能够与应用交互。REST API 是一种普遍接受的接口设计标准,基于 HTTP 协议。
文件系统日志(Filesystem for Logging):

将系统中的日志写入文件系统,便于后期分析和问题排查。
示例流程
通过 REST API 接收请求:

客户端向应用服务器发送 HTTP 请求,请求数据或触发某些操作。

Copy

Client --> REST API Server
数据存储与检索操作:

应用服务器通过 REST API 接收到请求后,根据需要与 MySQL 进行交互,存储或检索数据。

Copy

REST API Server <–> MySQL Database
异步处理任务:

一些耗时任务或需要后台处理的操作,会通过 AMQP 将任务消息发送给消息代理(例如 RabbitMQ)。消息代理负责将任务分发给相应的消费者进行处理。

Copy

REST API Server --> RabbitMQ (AMQP) --> Worker/Consumer
日志记录:

各个组件在执行过程中会产生日志,这些日志会被记录到文件系统中。

Copy

REST API Server / Worker/Consumer --> Log Files (Filesystem)
具体实现步骤

  1. 设置 REST API 服务器
    你可以使用例如 Flask、Django(如果用 Python)、Express.js(如果用 Node.js)等 Web 框架来实现 REST API 服务。

Copy

Flask 示例

from flask import Flask, request, jsonify
import mysql.connector
import pika # 用于连接 AMQP 代理
import logging

app = Flask(name)

配置日志记录

logging.basicConfig(filename=‘app.log’, level=logging.DEBUG)

MySQL 配置

db_config = {
‘user’: ‘your_user’,
‘password’: ‘your_password’,
‘host’: ‘localhost’,
‘database’: ‘your_database’
}

AMQP 配置

amqp_url = ‘amqp://guest:guest@localhost:5672/’

@app.route(‘/data’, methods=[‘POST’])
def add_data():
content = request.json
# 数据库操作
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
cursor.execute(“INSERT INTO your_table (column1, column2) VALUES (%s, %s)”, (content[‘column1’], content[‘column2’]))
conn.commit()
cursor.close()
conn.close()

# 发送消息到 AMQP
connection = pika.BlockingConnection(pika.URLParameters(amqp_url))
channel = connection.channel()
channel.queue_declare(queue='task_queue')
channel.basic_publish(exchange='', routing_key='task_queue', body=content['column1'])
connection.close()

# 日志记录
app.logger.info('Data added: %s', content)

return jsonify({'status': 'success'}), 201

if name == ‘main’:
app.run(debug=True)
2. 设置 RabbitMQ 消费者
消费者是从 RabbitMQ 队列中消费消息的进程或服务。

Copy

import pika
import logging

配置日志记录

logging.basicConfig(filename=‘worker.log’, level=logging.DEBUG)

def callback(ch, method, properties, body):
logging.info(“Received %r” % body)
# 在这里你可以处理消息内容,比如执行一些耗时操作

连接到 RabbitMQ

connection = pika.BlockingConnection(pika.URLParameters(amqp_url))
channel = connection.channel()

确保队列存在

channel.queue_declare(queue=‘task_queue’)

设置消费者

channel.basic_consume(queue=‘task_queue’, on_message_callback=callback, auto_ack=True)

logging.info(‘Waiting for messages. To exit press CTRL+C’)
channel.start_consuming()
3. 设置 MySQL 数据库
配置你的 MySQL 数据库,确保数据库和表已创建。例如:

Copy

CREATE DATABASE your_database;
USE your_database;
CREATE TABLE your_table (
id INT AUTO_INCREMENT PRIMARY KEY,
column1 VARCHAR(255),
column2 VARCHAR(255)
);
4. 文件系统日志
日志系统已经通过 logging 模块配置,让应用服务器和消费者都将日志写入指定的文件中。

解决方案的优势
松耦合:

REST API + AMQP 帮助实现组件间的解耦,使得更容易进行模块化开发和维护。
可靠性:

MySQL 提供持久化数据存储,RabbitMQ 提供可靠的消息传递机制。
可扩展性:

可以轻松地添加新的消费者或 REST API 服务,以应对增加的工作负载。
便于调试和监控:

文件系统日志记录有助于查看系统运行状态,便于调试和问题排查。
通过这种组合,你可以构建一个高效且可靠的分布式系统,适应多种业务场景。


http://www.kler.cn/a/370420.html

相关文章:

  • 利用rsync备份全网服务器数据
  • SQL-leetcode—626. 换座位
  • Reactive StreamsReactor Core
  • MySQL课堂练习(多表查询练习)
  • 第17章:Python TDD回顾与总结货币类开发
  • 数据结构与算法之查找: LeetCode 69. x 的平方根 (Ts版)
  • SSL/TLS 密码套件漏洞分析以及修复方法
  • 三防加固工业平板国产化的现状与展望
  • docker 安装postgres,nodejs连接pg
  • 在aws loadbalancer中配置http协议版本
  • BOOT_KEY按键(学习笔记)
  • 玩一玩MySQL服务器配置与管理的游戏(日志快乐版
  • LeetCode6题:Z字形变换(原创)
  • 传统数据仓库升级版:云数据仓库!
  • 传输线临界长度
  • 独立使用 APO 日志模块替代ELK实现日志监控功能
  • Vue学习笔记(八)
  • Matlab 用于处理光谱数据
  • 域权限维持及后渗透密码收集
  • [笔记] ffmpeg docker编译环境搭建
  • uniapp通过id获取div的宽度,高度,位置等(应该是 任意平台都通用 )
  • redis的string是怎么实现的
  • vue3取消跟踪auto-imports.d.ts,components.d.ts这两个文件的变化
  • 新魔百和HG680LC-LY,CM311-1,860av32等热门固件汇总
  • InnoDB 存储引擎<一>InnoDB简介与MySQL存储架构及相关数据结构
  • Oracle 第5章:表与数据操作