kafka实时返回浏览数据

在安装完kafka(Docker安装kafka_docker 部署kafka-CSDN博客),查看容器是否启动:

docker ps | grep -E 'kafka|zookeeper'

再用python开启服务

from fastapi import FastAPI, Request
from kafka import KafkaProducer
import kafka
import json
import logging
from datetime import datetime# 配置日志记录
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s')# 初始化 FastAPI 应用
app = FastAPI()# 示例博客文章数据
blog_posts = [{"id": 1, "title": "First Post", "content": "This is the first post."},{"id": 2, "title": "Second Post", "content": "This is the second post."}
]def produce_view_event(ip_address, post_id):"""生成博客文章的查看事件。参数:ip_address (str): 查看者的 IP 地址。post_id (int): 被查看的文章 ID。"""logging.info(f"生成查看事件,文章 ID: {post_id},IP 地址: {ip_address}")try:# 初始化 Kafka 生产者producer = KafkaProducer(bootstrap_servers='110.40.130.231:9092',value_serializer=lambda v: json.dumps(v).encode('utf-8'))# 准备发送到 Kafka 的消息message = {"ip_address": ip_address,"post_id": post_id,"event_type": "view"}logging.info(f"发送消息到 Kafka: {message}")future = producer.send('blog_views', value=message)try:# 等待消息成功发送record_metadata = future.get(timeout=10)logging.info(f"消息发送成功。主题: {record_metadata.topic}, 分区: {record_metadata.partition}, 偏移量: {record_metadata.offset}")except Exception as e:logging.error(f"发送消息失败: {e}")# 确保所有消息已发送并关闭生产者producer.flush()producer.close()# 将查看事件打印到控制台print_view_event(ip_address, post_id)except kafka.errors.NoBrokersAvailable as e:logging.error(f"没有可用的 Broker: {e}")def print_view_event(ip_address, post_id):"""打印博客文章的查看事件。参数:ip_address (str): 查看者的 IP 地址。post_id (int): 被查看的文章 ID。"""event_type = "view"created_at = datetime.now().isoformat()print(f"View Event - IP Address: {ip_address}, Post ID: {post_id}, Event Type: {event_type}, Created At: {created_at}")@app.get("/posts/{post_id}")
def get_post(post_id: int, request: Request):"""根据 ID 获取博客文章。参数:post_id (int): 博客文章的 ID。request (Request): 进来的请求对象。返回:dict: 如果找到文章则返回文章,否则返回错误信息。"""logging.info(f"收到请求,文章 ID: {post_id}")for post in blog_posts:if post["id"] == post_id:logging.info(f"找到文章: {post}")produce_view_event(request.client.host, post_id)return postreturn {"error": "文章未找到"}if __name__ == "__main__":import uvicornimport os# 获取当前文件名(不带扩展名)供 UVicorn 使用app_modeel_name = os.path.basename(__file__).replace(".py", "")print(app_modeel_name)# 使用 UVicorn 运行 FastAPI 应用uvicorn.run(f"{app_modeel_name}:app", host='0.0.0.0', port=1213, reload=True)

访问:http://110.40.130.231:1213/posts/1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/58933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MyBatis源码】BoundSql分析

基础 BoundSql是对SQL语句及参数信息的封装,它是SqlSource解析后的结果。Executor组件并不是直接通过StaticSqlSource对象完成数据库操作的,而是与BoundSql交互。BoundSql是对Executor组件执行SQL信息的封装,具体实现代码如下: …

A Consistent Dual-MRC Framework for Emotion-cause Pair Extraction——论文阅读笔记

前言 这是我第一次向同学院同年级的学生和老师们汇报的第一篇论文,于2022年发表在TOIS上,属于CCF A类,主要内容是将MRC应用到情感原因对抽取中。 论文链接:用于情绪-原因对提取的一致双 MRC 框架 |信息系统上的 ACM Transactions 这里我就不放上我自己翻译的中文版还有我…

【Linux系统】—— 基本指令(一)

【Linux系统】—— 基本指令(一) 1 「ls」指令1.1 初识 「ls」 指令1.2 「ls -l」1.3 认识文件1.4 「ls -l」显示的内容1.5 如何区分文件类型1.6 「ls -a」1.7 混合使用命令行选项1.8 「ls」查看指定目录下文件1.9 「ls」 指令常用命令行选项 2 「pwd」 …

js,ts控制流程

摘要: 在 JavaScript 和 TypeScript 中,控制流程是指程序执行的顺序和条件判断。以下是一些常见的控制流程结构,包括条件语句、循环语句和函数调用等。 1. 条件语句: if 语句 let condition true;if (condition) {console.log(C…

计组-Cache的基本概念,计算Cache+主存的平均周期

由于寄存器是集成在CPU中且容量极小,所以我们用Cache来提高速度,在无寄存器时其当做访问速度最快的 Cache的命中率: 是指当CPU要处理某个数据时,首先会考虑在Cache里面去读取,当需要读取的数据在Cache里面时,此时这个…

《大数据与人工智能:提升数据质量与数量的利器》

《大数据与人工智能:提升数据质量与数量的利器》 一、大数据与人工智能的融合趋势二、大数据增加数据数量的方法(一)不同途径的数据增量(二)数据增强的多样方法 三、人工智能提升数据数量的手段(一&#xf…

算法中使用的数据结构解释*

算法中使用的数据结构解释 在算法的执行过程中,需要有能够容纳临时数据的内存数据结构。数据结构的有效实施需要选择适当的数据结构。迭代或递归算法需要专门为其逻辑设计的数据结构。 也有人表述为容器,存放数据的容器。 在递归算法的情况下&#xff0c…

UE4安卓Gradle工程中的libUE4.so的生成原理

流程图 流程图放在最前面,下面是讲解。 libUE4.so 问:在UE4安卓开发中,libUE4.so即是符号表,又是引擎代码native,是吗? 答:是的,libUE4.so在UE4安卓开发中既包含符号表,…

C4.【C++ Cont】C++数据类型和typedef的补充说明

1.数据类型 C同C语言的一样的数据类型不在赘述,参见3.【C语言】内置数据类型,这里只讲不同点 1.在C中,布尔类型包含在头文件iostream中,不用像C语言一样包含stdbool.h 布尔类型变量的定义写法和C语言不同,只能写成 bool a true; bool b false; bool不可写成_Bool或Bool …

Windows部署rabbitmq

本次安装环境: 系统:Windows 11 软件建议版本: erlang OPT 26.0.2rabbitmq 3.12.4 一、下载 1.1 下载erlang 官网下载地址: 1.2 下载rabbitmq 官网下载地址: 建议使用解压版,安装版可能会在安装软件…

前端学习-盒子模型(十八)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 盒子模型组成 边框 语法 边框简写 代码示例 表格的细线边框 语法 内边距 内边距复合写法 外边距 外边距典型应用 外边距合并 清除内外边距 总结 前…

GHuNeRF: Generalizable Human NeRF from a Monocular Video

研究背景 研究问题:这篇文章要解决的问题是学习一个从单目视频中泛化的人类NeRF模型。尽管现有的泛化人类NeRF已经取得了令人印象深刻的成果,但它们需要多视图图像或视频,这在某些情况下可能不可用。此外,一些基于单目视频的人类…

为啥学习数据结构和算法

基础知识就像是一座大楼的地基,它决定了我们的技术高度。而要想快速做出点事情,前提条件一定是基础能力过硬,“内功”要到位。 想要通关大厂面试,千万别让数据结构和算法拖了后腿 我们学任何知识都是为了“用”的,是为…

离线安装Vue2开发环境

在外网进行Vue2开发后,需要转到内网开发,无法在线依赖库安装,需要迁移node_modules。 1.内外网开发电脑安装同样版本的nodejs 我本地安装的node-v16.17.1-x64.msi,所以在内网环境也要按照node-v16.17.1-x64.msi。 在外网环境使用…

初探Flink的序列化

Flink中的序列化应用场景 程序通常使用(至少)两种不同的数据表示形式[2]: 1. 在内存中,数据保存在对象、结构体、列表、数组、哈希表和树等结构中。 2. 将数据写入文件或通过网络发送时,必须将其序列化为字节序列。 从内存中的表示到字节序列…

【ESP32】ESP-IDF开发 | I2C控制器+I2C主从收发例程

1. 简介 I2C(Inter-Integrated Circuit),是由Philips公司在1980年代初开发的一种半双工的同步串行总线,它利用一根时钟线和一根数据线在连接总线的两个器件之间进行信息的传递,为设备之间数据交换提供了一种简单高效的…

提高交换网络可靠性之端口安全配置

转载请注明出处 此实验为配置交换机端口安全,当非法设备接入接口时自动触发安全措施 1.查看PC1和PC2的MAC地址👇 2.交换机改名为S1,同时启用端口安全 3.配置允许接入设备 4.设置违规处理方式:即违规则关闭端口 5.查看安全端口相关…

UE5 第三人称学习之动画 control rig

这个东西和建模软件里有的是一个东西,然后IK就是你动脚,他帮你算出小腿大腿该怎么动,FK就是你自己动了大腿,摆小腿,然后再摆脚 就是给每一根骨骼搞一个控制器,给他一个容易选中和操作更明显的图形作为控制…

宏处理将多个excel文件的指定sheet页合并到一个excel文件中

背景了解:有个同事问我:现在他要处理一千多个文件,每个excel文件都有3个sheet页签,想把所有的excel文件的第二个sheet页签复制一份放到一个新的excel文件中。如果是手动去操作一个个文件的复制,也没什么不可&#xff0…

Linux系列-进程的概念

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 这篇文章,我们主要分析一下进程。 之前,我们讲过了冯诺依曼体系架构, 我们常见的计算机,像笔记本,或者不常见的计算机…