Files
smart-management-auto-test/base_framework/public_tools/rocket_mq.py
qiaoxinjiu 6994b185a3 addproject
2026-01-22 19:10:37 +08:00

139 lines
6.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# coding=utf-8
# 用于MQ的各类操作
import time
import os
from base_framework.public_business.common.UBRD.kw.promotion_keyword import obj_log
from base_framework.public_tools.read_config import ReadConfig, get_current_env, get_current_config
from base_framework.public_tools.runner import Runner
from base_framework.public_tools.custom_error import BusinessError
obj_runner = Runner()
class RocketMQ:
def __init__(self, env=''):
self.need_login = True # 是否需要登录
self.team = get_current_config(section="run_evn_name", key="current_team")
if not env:
env = get_current_env().lower()
if env.lower() == 'sim':
if self.team in ['XUEDAU']:
self.mq_host = ""
self.need_login = False
else:
self.mq_host = "https://mq-console.sim.huohua.cn"
else:
if self.team in ['XUEDAU']:
self.mq_host = "http://10.250.200.3:19876"
self.need_login = False
else:
self.mq_host = "https://mq-console.qa.huohua.cn"
def mq_query_msg_info(self, topic, begin_time, end_time):
"""查询mq消息"""
msg_id_list = self.__query_msg_id_list(topic=topic, begin_time=begin_time, end_time=end_time)
msg_info = []
for msg_id in msg_id_list:
m_info = self.__query_msg_detail_by_id(topic=topic, msg_id=msg_id)
msg_info.append(m_info)
return msg_info
def mq_query_msg_info_by_sub_str(self, topic, begin_time, end_time, sub_str=None):
"""查询mq消息并返回匹配的消息内容"""
msg_info = self.mq_query_msg_info(topic=topic, begin_time=begin_time, end_time=end_time)
if sub_str:
sub_msg = []
for msg in msg_info:
if str(sub_str) in str(msg["msg_body"]):
sub_msg.append(msg)
return sub_msg
else:
return msg_info
def __query_msg_id_list(self, topic, begin_time, end_time):
"""查询mq的id列表"""
mq_url = "{}/message/queryMessageByTopic.query".format(self.mq_host)
post_data = {"topic": topic,
"begin": str(time.mktime(time.strptime(str(begin_time), '%Y-%m-%d %H:%M'))).split('.')[0] + '000',
"end": str(time.mktime(time.strptime(str(end_time), '%Y-%m-%d %H:%M'))).split('.')[0] + '000'}
if self.need_login:
resp = obj_runner.call_rest_api(user=None, API_URL=mq_url, req_type="GET", params=post_data)
else:
resp = obj_runner.call_rest_api(user=None, API_URL=mq_url, req_type="GET", token=False, params=post_data)
if resp['status'] == 0:
msg_id_list = []
for item in resp['data']:
msg_id_list.append(item['msgId'])
return msg_id_list
else:
raise Exception("查询MQ消息列表失败{}".format(resp))
def __query_msg_detail_by_id(self, topic, msg_id):
"""查询mq消息明细"""
mq_url = "{}/message/viewMessage.query".format(self.mq_host)
post_data = {"topic": topic, "msgId": msg_id}
if self.need_login:
resp = obj_runner.call_rest_api(user=None, API_URL=mq_url, req_type="GET", params=post_data)
else:
resp = obj_runner.call_rest_api(user=None, API_URL=mq_url, req_type="GET", token=False, params=post_data)
if resp['status'] == 0:
msg_tag = resp['data']['messageView']['properties'].get('TAGS', None)
msg_key = resp['data']['messageView']['properties'].get('KEYS', None)
msg_env = resp['data']['messageView']['properties'].get('podenv', None)
msg_body = resp['data']['messageView'].get('messageBody', None)
return {"msg_id": msg_id, "msg_tag": msg_tag, "msg_key": msg_key, "msg_env": msg_env, "msg_body": msg_body}
else:
raise Exception("查询MQ消息明细失败{}".format(resp))
def mq_send_msg(self, topic, message_body, tag=None, key=None, pro=None, **kwargs):
"""mq消息发送"""
mq_url = "{}/topic/sendTopicMessage.do".format(self.mq_host)
post_data = {'topic': topic,
'tag': tag,
'key': key,
'messageBody': str(message_body).replace("'", "\"")
}
if not pro:
# 添加启动文件中的独立环境编号
cfg_path = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
ini_path = cfg_path + '/base_framework/base_config/env_choose.ini'
jira_id = ReadConfig(ini_path).get_value(sections='run_jira_id', options='huohua-podenv')
if jira_id:
post_data['pro'] = jira_id
else:
post_data['pro'] = 'qa'
else:
post_data['pro'] = pro
if self.team.lower() == "xuedau":
resp = obj_runner.call_rest_api(user=None, API_URL=mq_url, req_type="POST", json=post_data, **kwargs)
else:
resp = obj_runner.call_rest_api(user=None, API_URL=mq_url, req_type="POST", json=post_data)
try:
obj_log.info("发送mq消息返回{}".format(resp))
if resp and 'errMsg' in resp and 'timeout' in str(resp['errMsg']):
time.sleep(1) # 如果接口返回超时,就再发送一次
resp = obj_runner.call_rest_api(user=None, API_URL=mq_url, req_type="POST", json=post_data)
elif resp and 'message' in resp and '无效的token' in str(resp['message']):
time.sleep(1) # 如果token过期就再发送一次
resp = obj_runner.call_rest_api(user=None, API_URL=mq_url, req_type="POST", json=post_data)
elif resp and resp['status'] == 0 and resp['data']['sendStatus'] == 'SEND_OK':
return True
else:
raise Exception("发送mq消息失败{}".format(resp))
except Exception as e:
obj_log.info("发送mq消息体{}".format(post_data))
raise Exception("发送mq消息失败{}|{}".format(e, resp))
if __name__ == '__main__':
mq = RocketMQ()
mb = {"platformId": 2, "eventType": "user.join", "roleType": 200, "roleId": 48711, "appId": "", "source": "SparkEnglish", "classroomCode": "", "classroomType": 1, "scheduleCode": "ECR666358307917090884", "joinTime": 1747189786903, "classSizeType": 1, "isFirst": "", "subChannelCodeList": "", "deviceId": "20200830-9CFC-E8BE-8D68-9CFCE8BE8D6C", "classroomVersion": "25.5.3-qa.2212381", "appVersion": "25.4.7-stable.2172220"}
rsp = mq.mq_send_msg(topic='CP_CLASSROOM_STATUS_SYNC', message_body=mb, tag='TAG_ROLE_JOIN_TIME', pro='QA', xuedau="")
print(rsp)