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

RocketMQ云服务器和本地基础安装搭建及可视化控制台安装使用

一起学编程,让生活更随和!

如果你觉得是个同道中人,欢迎关注博主gzh:【随和的皮蛋桑】。

专注于Java基础、进阶、面试以及计算机基础知识分享🐳。偶尔认知思考、日常水文🐌。

在这里插入图片描述


目录

  • 一、RocketMQ 介绍
    • 1、RocketMQ是什么?
    • 2、MQ 的应用场景
      • 2.1、异步任务处理
      • 2.2、应用程序解耦合
      • 2.3、日志收集
    • 3、消息队列技术选型对比
  • 二、RocketMQ 安装和基础使用
    • 1、RocketMQ组成结构
      • 1.1、交互过程
      • 1.2、集群作用
    • 2、RocketMQ安装
      • 2.1、本地Windows安装
        • 2.1.1、环境要求
        • 2.1.2、下载
        • 2.1.3、环境搭建
        • 2.2.4、测试
      • 2.2、云服务器Linux安装
        • 2.2.1、环境要求
        • 2.2.2、环境搭建
        • 2.2.3、测试
    • 3、安装可视化控制台

一、RocketMQ 介绍

1、RocketMQ是什么?

RocketMQ是阿里开源的一款非常优秀中间件产品,脱胎于阿里的另一款队列技术MetaQ,后捐赠给Apache基金会作为一款孵化技术,仅仅经历了一年多的时间就成为Apache基金会的顶级项目。并且它现在已经在阿里内部被广泛的应用,并且经受住了多次双十一的这种极致场景的压力。(2017年的双十一,RocketMQ流转的消息量达到了万亿级,峰值TPS达到5600万)。并且其内部通过Java语言开发,便于阅读与修改。

RocketMQ官: http://rocketmq.apache.org/

2、MQ 的应用场景

MQ全称为Message Queue,即消息队列, 开发中消息队列通常有如下应用场景:

2.1、异步任务处理

将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。

传统方式:

在这里插入图片描述

改造后,交互流程如下:

  1. 订单服务发消息到消息队列。
  2. 消息队列将消息发给仓储服务和物流服务。
  3. 仓储服务和物流服务接收到消息进行业务处理。

在这里插入图片描述

2.2、应用程序解耦合

MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合。
举例:上图中,消息队列将订单服务和仓储服务进行解耦合,将订单服务和物流服务进行解耦合。

2.3、日志收集

进行统一业务日志收集,供分析系统进行数据分析,消息队列作为日志数据的中转站。
交互流程如下:
1、采集系统从log日志文件采集数据,发送至消息队列 。
2、各日志需求服务从消息队列 接收消息进行日志处理。

在这里插入图片描述

3、消息队列技术选型对比

市场上还有哪些消息队列?

ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,Redis等

本项目选用RocketMQ的一个主要原因如下 :

  1. 支持事务消息
  2. 支持延迟消息
  3. 天然支持集群、负载均衡
  4. 支持指定次数和时间间隔的失败消息重发

详细的技术选型对比如下:

RabbitMQ:

优点:                           1.支持AMQP协议                                           2.基于erlang语言开发,高并发性能较好                         3.工作模式较为灵活      4.支持延迟消息5.提供较为友好的后台管理页面 6.单机部署,1~2WTPS    
缺点:1.不支持水平扩容    2.不支持事务    3.消息吞吐量三者最差    4.当产生消息堆积,性能下降明显    5.消息重发机制需要手动设置    6.不支持消息重复消费 

RocketMQ:

优点:1.高可用,高吞吐量,海量消息堆积,低延迟性能上,都表现出色    2.api与架构设计更加贴切业务场景    3.支持顺序消息    4.支持事务消息    5.支持消息过滤    6.支持重复消费    7.支持延迟消息    8.支持消息跟踪    9.天然支持集群、负载均衡    10.支持指定次数和时间间隔的失败消息重发    11.单机部署,5~10WTPS    
缺点:1.生态圈相较Kafka有所不如    2.消息吞吐量与消息堆积能力也不如Kafka    3.不支持主从自动切换    4.只支持Java

Kafka:

优点:1.高可用,高吞吐量,低延迟性能上,都表现出色    2.使用人数多,技术生态圈完善    3.支持顺序消息    4.支持多种客户端    5.支持重复消费    
缺点:1.依赖分区,消费者数量受限于分区数    2.单机消息过多时,性能下降明显    3.不支持事务消息    4.不支持指定次数和时间间隔的失败消息重发

二、RocketMQ 安装和基础使用

1、RocketMQ组成结构

在这里插入图片描述

1.1、交互过程

  1. Brokder定时发送自身状态 到NameServer。
  2. Producer 请求NameServer获取Broker的地址。
  3. Producer 将消息发送到Broker中的消息队列。
  4. Consumer订阅Broker中的消息队列,通过拉取消息,或由Broker将消息推送至Consumer。

1.2、集群作用

1)Producer Cluster 消息生产者集群

  • 负责发送消息,一般由业务系统负责产生消息。

2)Consumer Cluster 消费者集群

  • 负责消费消息,一般是后台系统负责异步消费。
  • 两种消费模式:
    • Push Consumer,服务端向消费者端推送消息
    • Pull Consumer,消费者端向服务定时拉取消息

3)NameServer 名称服务器

  • 集群架构中的组织协调员,相当于注册中心,收集 broker的工作情况,不负责消息的处理

4)Broker 消息服务器

  • 是 RocketMQ的核心,负责消息的接受,存储,发送等。
  • 需要定时发送自身状态 到NameServer,默认10秒发送一次,超时2分钟会认为该broker失效。

2、RocketMQ安装

RocketMQ安装:本地Windows版本和云服务器Linux版本。

2.1、本地Windows安装

2.1.1、环境要求

  1. 64位JDK 1.8+;
  2. Maven 3.2.x;
  3. 64位操作系统。

2.1.2、下载

官网下载地址:https://archive.apache.org/dist/rocketmq/

根据需要下载对应的版本,本文介绍采用:4.5.0

下载后解压到一个没有空格和中文的目录。

在这里插入图片描述

2.1.3、环境搭建

maven 采用3.2.x 及以上版本均可(自行找教程下载安装即可)。

1)参数配置

开发环境不需要太多的内存,这里调小一点。

Broker默认磁盘空间利用率达到85%就不再接收,这里在开发环境可以提高磁盘空间利用率报警阀值为98%。

调整默认的内存大小参数,切换到bin目录下,编辑runserver.cmd

cd bin/
vim runserver.cmd

在这里插入图片描述

修改为如下:

set "JAVA_OPT=%JAVA_OPT% ‐server ‐Xms512m ‐Xmx512m ‐Xmn512m ‐XX:MetaspaceSize=128m ‐XX:MaxMetaspaceSize=320m"

bin目录下,编辑修改runbroker.cmd

cd bin/
vim runbroker.cmd

在这里插入图片描述

修改为如下:

set "JAVA_OPT=%JAVA_OPT% ‐server ‐Drocketmq.broker.diskSpaceWarningLevelRatio=0.98 ‐Xms512m ‐Xmx512m ‐Xmn512m"

指定broker的命名空间地址,编辑broker.conf

在这里插入图片描述

默认情况下,namesrvAddr127.0.0.1:9876

2)配置环境变量

路径只到解压目录即可:

在这里插入图片描述

3)启动NameServer

打开cmd窗口,切换到bin目录:

d:
cd D:\Software\MQ\rocketmq-all-4.5.0-bin-release\bin
start mqnamesrv.cmd

在这里插入图片描述

4)启动Broker

打开cmd窗口,切换到bin目录下:

# -n:指定NameServer的地址
start mqbroker.cmd ‐n 127.0.0.1:9876 autoCreateTopicEnable=true

在这里插入图片描述

此窗口也不要关闭。

2.2.4、测试

bin目录下专门提供了一个tools.cmd工具类,可以测试namesrvbroker是否真正启动成功!

1)打开cmd窗口【发送消息】

set NAMESRV_ADDR=127.0.0.1:9876
cd D:\Software\MQ\rocketmq-all-4.5.0-bin-release\bin
# 启动生产者
tools.cmd org.apache.rocketmq.example.quickstart.Producer

如果启动报错,仔细检查启动namesrvbroker的参数配置,以及tools.cmd的参数配置!!!

正确启动如下:

在这里插入图片描述

2)打开cmd窗口【接收消息】

set NAMESRV_ADDR=127.0.0.1:9876
cd D:\Software\MQ\rocketmq-all-4.5.0-bin-release\bin
# 启动消费者
tools.cmd org.apache.rocketmq.example.quickstart.Consumer

在这里插入图片描述

windows下安装和测试完成!!!

2.2、云服务器Linux安装

2.2.1、环境要求

下载地址和环境要求和上述要求大致保持一致!!!

2.2.2、环境搭建

前提是要拥有一个云服务器,我购买的是阿里云轻量级服务器,自己玩够用了,当然如果没条件也可以自己在本地使用VMware一样效果。

如果想购买云服务器,传送门:https://blog.csdn.net/qq_52596258/article/details/121290659

1)使用远程链接工具(Tabby)和SFTP工具将其上传到服务器上:

在这里插入图片描述

2)解压

# 解压
unzip rocketmq-all-4.5.0-bin-release.zip# 将解压包,移动到指定路径下
mv rocketmq-all-4.5.0-bin-release ../software

3)参数配置

runserver.sh

runbroker.sh

tools.sh

上述配置文件的jvm参数和windows下的配置保持一致即可!!!

云服务器需要在broker.conf文件最下面添加如下配置:

brokerIP = 服务器公网IP# eg
brokerIP = 106.15.0.30

4)操作指令【bin目录下】

# 启动 nameserver
nohup sh mqnamesrv -n 106.15.0.30:9876 &# 启动 broker
nohup sh mqbroker -n 106.15.0.30:9876 -c ../conf/broker.conf autoCreateTopicEnable=true &# 查看进程
jps -l

在这里插入图片描述

# 关闭服务
sh mqshutdown namesrv
sh mqshutdown broker

2.2.3、测试

1)启动Producer【发送消息】

# 生产者
sh tools.sh org.apache.rocketmq.example.quickstart.Producer

在这里插入图片描述

2)启动Consumer【接收消息】

# 消费者
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer

在这里插入图片描述

Linux下搭建成功!

3、安装可视化控制台

1)下载

RocketMQ提供了UI管理工具,名为rocketmq-console,项目地址:https://github.com/apache/rocketmq-externals/tree/master/rocketmq-console

这个是rocketmq的扩展,里面不仅包含控制台的扩展,也包含对大数据flume、hbase等组件的对接和扩展。

在这里插入图片描述

2)上传解压

为了演示服务器版搭建,我直接下载上传至云服务器:

在这里插入图片描述

# 解压
unzip rocketmq-console.zip# 移动到software目录下
mv rocketmq-console ../software

3)修改配置参数

修改rocketmq-console\src\main\resources\application.properties配置文件

在这里插入图片描述

4)打包

进入rocketmq-console目录下

打开cmd窗口执行:

mvn clean package ‐Dmaven.test.skip=true

5)启动

进入/rocketmq-console/target目录下执行:

# 指定端口号和命名空间地址
java -jar rocketmq-console-ng-1.0.1.jar --server.port=9877 --rocketmq.config.namesrvAddr=106.15.0.30:9876

在这里插入图片描述

虽然console启动成功,想控制台不报错误日志,必须先启动namesrvbroker,让console连接上命名空间和broker

6)访问

http://106.15.0.30:9877

如果无法访问,很有可能是服务器的防火墙没有开放端口号,步骤如下:

# 查看防火墙状态
systemctl status firewalld# 关闭防火墙
systemctl stop firewalld# 启动防火墙
systemctl start firewalld# 永久开放指定端口号【把用到的端口号都开放】
firewall-cmd --zone=public --add-port=10909/tcp --permanent
firewall-cmd --zone=public --add-port=10911/tcp --permanent
firewall-cmd --zone=public --add-port=9876/tcp --permanent
firewall-cmd --zone=public --add-port=9877/tcp --permanent# 重新加载防火墙
firewall-cmd --reload# 或者重启防火墙
systemctl restart firewalld.service# 查看防火墙信息列表
firewall-cmd --list-all# 只查看防火墙开放端口号列表
firewall-cmd --list-ports

在这里插入图片描述

防火墙端口号开放之后,同时也要在ECS服务器安全组中添加端口规则:

在这里插入图片描述

入方向和出方向最好都添加上。

再次访问:http://106.15.0.30:9877

如果还不行,那这个时候不要着急,着急也没有用,我们先来理下思路,

  1. 防火墙端口号打开了
  2. 安全组规则添加了

还访问不了,是不是还有防火墙,果然上网搜索,发现阿里云服务器还有一层防火墙iptables,应该是默认配置的,如何关闭或者在这层防火墙也开放端口号,步骤如下:

# 查看防火墙状态出现的问题
service iptables status# 关闭防火墙
service iptables stop

如果上述命令报错,可能是没有安装iptable,但是默认确实有这一层防火墙的。

解决办法:打开阿里云进入轻量级服务器界面,左边菜单栏有一个防火墙tab,这个代表的就是iptable,直接在这添加端口开放规则

在这里插入图片描述

再次访问:http://106.15.0.30:9877

在这里插入图片描述

大功告成,访问成功,撒花!!!


在这里插入图片描述


相关文章:

RocketMQ云服务器和本地基础安装搭建及可视化控制台安装使用

一起学编程,让生活更随和! 如果你觉得是个同道中人,欢迎关注博主gzh:【随和的皮蛋桑】。 专注于Java基础、进阶、面试以及计算机基础知识分享🐳。偶尔认知思考、日常水文🐌。 目录一、RocketMQ 介绍1、Ro…...

JavaScript:简单理解防抖和节流,如何定义防抖和节流函数?

防抖 防抖函数,就是防止抖动,避免事件重复触发。比如监听输入框的输入,不应该在用户每输入一个字符就触发监听,而是在用户输入结束后再来监听。 流程为: 1、事件触发; 2、开启定时器; 3、当事…...

【opencv 系列】第3章 图像的8种变换

文章目录前言上代码1.1 复习读取和显示1.2 图像放大、缩小 cv2.resize()1.3 图像平移1.4 图像旋转1.5 图像仿射变换1.6 图像的裁剪1.7 位运算(AND, OR, XOR)1.8 图像的分离和融合1.9 颜色空间 color space前言 坦白说,这一章我认为是整个opencv系列最难的一张&…...

【C语言刷题】倒置字符串

解题思路与过程📽️解题思路📽️解题过程🔧1.输入🔧2.设计逆序函数🔧3.逆序整个字符串🔧4.逆序每个单词📽️源码📷先来看题👇📽️解题思路 🔴 首先…...

用switch语句编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:

用switch语句编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:操作数1 运算符op 操作数2计算表达式的值,指定的算术运算符为加()、减(-)、乘(*)、除&#…...

uboot编译分析

uboot编译分析 V 1 –> Q ,在一行命令前面加上表示不会在终端输出命令 KCONFIG_CONFIG ? .config.config 默认是没有的,默认是需要使用命令“make xxx_defconofig”先对uboot进行配置,配置完成就会在uboot根目录下生成.config。如果后续自行调整…...

SpringCloud Alibaba集成Dubbo实现远程服务间调用

SpringCloud Alibaba集成Dubbo实现远程服务间调用 工程创建 一、创建springBoot分模块项目,父工程:springcloud-alibaba以及子模块product-dubbo-provider、order-dubbo-consumer等 项目基本结构图如下所示: 二、依赖引入 在以上两个子模块…...

网络编程(一)

网络编程 文章目录网络编程前置概念1- 字节序高低地址与高低字节高低地址:高低字节字节序大端小端例子代码判断当前机器是大端还是小端为何要有字节序字节序转换函数需要字节序转换的时机例子一例子二2- IP地址转换函数早期(不用管)举例现在与字节序转换函数相比:**…...

PVE硬件直通之强制IOMMU分组

文章目录检查是否直接支持IOMMU分组配置IOMMU分组不直接支持的需要更新内核参考检查是否直接支持IOMMU分组 下面 以SATA控制器为例,看pci设备是否可以直接支持IOMMU分组 /* 打印pci设备详细信息*/ lspci -vv /* 找到SATA controller 段落*/ 16:00.1 SATA controll…...

深入讲解Kubernetes架构-node

Kubernetes 通过将容器放入在节点(Node)上运行的 Pod 中来执行你的工作负载。 节点可以是一个虚拟机或者物理机器,取决于所在的集群配置。 每个节点包含运行 Pod 所需的服务; 这些节点由控制面负责管理。通常集群中会有若干个节点…...

XSS-labs-master

XSS 经典14关这边先说一下常用的弹窗手法<script>alert(1)</script> <script>confirm(1)</script> <script>alert(1)</script> <script>alert(/1/zyl)</script> <script>alert(document.cookie)</script> <scr…...

「可信计算」助力TLS 传输更安全

序言背景&#xff08;Satuation&#xff09;&#xff1a;TLS 是 TCP/IP 上的传输层安全协议&#xff0c;保护着数以亿万级的数据安全&#xff0c;我们在浏览器中输入的 https&#xff0c;就是受到 TLS 保护的。冲突&#xff08;complication&#xff09;&#xff1a;从可信计算…...

链表学习基础

链表 通过指针串联在一起的线性结构&#xff0c;每个节点由数据域和指针域两部分组成。链表节点在内存中的存储通常不是连续的&#xff0c;各节点通过指针连接在一起&#xff0c;其内存分布大致如下图所示。 定义 单链表 struct ListNode {// DATATYPE 可以是任意存放数据的…...

springboot整合阿里云oss文件服务器

springboot整合阿里云oss文件服务器一、申请Bucket二、 获取AccessKey ID、AccessKey Secret三、 springboot整合3.1 在application.yml 配置参数3.2 oss需要的pom3.3 配置 oss配置类3.4 oss的controller类3.5 oss的service类以及impl一、申请Bucket 进入该网址对象存储oss述 …...

数据分析:旅游景点销售门票和消费情况分析

数据分析&#xff1a;旅游景点销售门票和消费情况分析 文章目录数据分析&#xff1a;旅游景点销售门票和消费情况分析一、前言二、数据准备三、分析数据四、用户购买门票数量分析五、用户复购分析六、用户回购分析七、占比分析1.每个月分层用户占比情况。2.每月不同用户的占比3…...

Android问题解决方案(一):Android 打空包后提示没有”android:exported“的属性设置

Android 打空包后提示没有”android:exported“的属性设置Android 打空包后提示没有”android:exported“的属性设置1、问题&#xff1a;2、文档3、参考链接&#xff1a;4、解决方案&#xff1a;Android 打空包后提示没有”android:exported“的属性设置 1、问题&#xff1a; …...

Portraiture2023最新版人像图像后期处理软件

2023全新发布Portraiture 4是专注于图像后期处理软件研发的 Imagenomic, LLC产品之一&#xff0c;在摄影爱好者中有点影响力。Portraiture可以将繁琐复杂的人像磨皮操作极致简化&#xff0c;不论是普通爱好者或专业后期处理人员&#xff0c;均能一键完成。凭借优秀的AI算法和多…...

链表OJ(七)删除有序链表中重复的元素-I -II

目录 删除有序链表中重复的元素-I 删除有序链表中重复的元素-II 删除有序链表中重复的元素-I 描述 删除给出链表中的重复元素&#xff08;链表中元素从小到大有序&#xff09;&#xff0c;使链表中的所有元素都只出现一次 例如&#xff1a; 给出的链表为1→1→21→1→2,返回1…...

C语言经典编程题100例(81~100)

目录81、习题7-7 字符串替换82、习题8-10 输出学生成绩83、习题8-2 在数组中查找指定元素84、习题8-3 数组循环右移85、题8-9 分类统计各类字符个数86、习题9-2 计算两个复数之积87、习题9-6 按等级统计学生成绩88、习题11-1 输出月份英文名89、习题11-2 查找星期90、练习10-1 …...

ChIP-seq 分析:数据质控实操(5)

1. 数据 今天将继续回顾我们在上一次中研究的 Myc ChIPseq。这包括用于 MEL 和 Ch12 细胞系的 Myc ChIPseq 及其输入对照。 可在此处[1]找到 MEL 细胞系中 Myc ChIPseq 的信息和文件可在此处[2]找到 Ch12 细胞系中 Myc ChIPseq 的信息和文件可以在此处[3]找到 MEL 细胞系的输入…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...