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信息的封装,具体实现代码如下: …

Vue3 + Pinia:轻松读取数据的终极指南

Hey小伙伴们!今天我们要聊的是Vue3中一个非常强大的状态管理库——Pinia。Pinia不仅简化了状态管理的复杂度,还提供了丰富的功能,让你在读取数据时更加得心应手。让我们一起来看看如何在Vue3项目中使用Pinia读取数据吧!&#x1f3…

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」 …

虚拟机安装Ubuntu系统

1、下载虚拟机 虚拟机下载链接 链接:https://pan.baidu.com/s/1JTSDhcw-_uQfMYPQbNuJ9w 提取码:hkf0 秘钥 JU090-6039P-08409-8J0QH-2YR7F 2、Ubuntu镜像下载 下载Ubuntu桌面系统 | Ubuntu 3、设置虚拟机 参考下文 虚拟机安装Ubuntu教程(详细)-C…

js,ts控制流程

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

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

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

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

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

【JAVA】Java基础—Java概述:Java的特点

Java语言因其独特的设计理念和强大的功能,在软件开发领域获得了广泛的应用。以下是Java的几个主要特点的详细说明,以及通俗易懂的例子来帮助理解这些概念。 1. 跨平台性 理论说明 Java的跨平台性是其最显著的特点之一,得益于Java虚拟机&am…

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

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

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

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

一文囊括风控建模中的变量筛选方法

风控建模在金融领域中起着至关重要的作用,特别是在信贷和支付领域。为了构建稳定和有效的风控模型,变量筛选是一个必不可少的步骤。本文将详细介绍几种在风控建模中常用的变量筛选方法。 文章目录 一、变量自身分布稳定性1 变量PSI值计算2 长期趋势图二、变量和目标值的强相关…

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 官网下载地址: 建议使用解压版,安装版可能会在安装软件…

映射是到上的,即满射

映射(Mapping)在数学中通常指的是从一个集合到另一个集合的函数。在更具体的情况下,映射可以是一对一(Injective)的,这意味着定义域中的每个元素都映射到值域中的唯一元素,没有两个不同的元素映…

迷宫求解:探索最优路径的算法与应用

迷宫求解问题通常可以通过图搜索算法来解决,常用的方法包括广度优先搜索(BFS)、深度优先搜索(DFS)和A*算法。以下是一个使用BFS解决迷宫问题的Python示例: Python 迷宫求解代码示例 from collections imp…

solidity中的Error和Modifier详解

异常 写智能合约经常会出bug,solidity中的异常命令帮助我们debug。 Error error是solidity 0.8.4版本新加的内容,方便且高效(省gas)地向用户解释操作失败的原因,同时还可以在抛出异常的同时携带参数,帮助开发者更好地调试。人们…

leetcode hot100【LeetCode 139. 单词拆分】java实现

LeetCode 139. 单词拆分 题目描述 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。 示例 1&am…

etcd-python

etcd 分布式键值(key-value)数据库 基于go语言实现 分布式系统中提供强一致性、高可用性的组件 etcd内部采用raft协议作为一致性算法 用来存储少量重要的数据 pip install etcd3 import etcd # 连接etcd(可以加用户名密码) etcd etcd3.client(host192…

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

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