使用rocketMQ进行通信

RocketMQ网络通信 目录简介服务端实现 简介 RocketMQ的remoting模块是RocketMQ客户端、消费端、NameServer、Broker之间通信的基础。是通过netty框架实现的。核心类的继承结构如下: RemotingService接口定义了start()、shutdown()、registerRPCHook()方法。registerRPCHook()方法可以为服务注册钩子方法。 RemotingServer提供了服务端的基本功能:注册请求处理器、消息发送(同步、异步、Oneway)。 RemotingCl 阅读详情

需求:确定两个平台之间能够正常通信,以及业务模块在绑定授权码后像控制平台发送一条消息
代码实现:
application.yml

rocketmq:
  name-server: 199.199.199.199:9876;199.199.199.199:9876
  #name-server: 127.0.0.1:9876
  producer:
    group: sveco-project-be-parent-dev
    send-message-timeout: 30000
    #发送ams开通/关闭服务结果topic
    topicServiceSwitchResult: 004_ams_service_switch_result
  consumer:
    #接收ams申请开通/关闭服务topic
    topicServiceSwitch: 004_ams_project_service_switch

xml

<dependency>
	<groupId>org.apache.rocketmq</groupId>
	<artifactId>rocketmq-spring-boot-starter</artifactId>
	<version>2.1.0</version>
</dependency>

ServiceSwitchConsumer

import com.alibaba.fastjson.JSONObject;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Optional;

@Slf4j
@Service
@RocketMQMessageListener(topic = "${rocketmq.consumer.topicServiceSwitch}", consumerGroup = "${rocketmq.producer.group}")
public class ServiceSwitchConsumer implements RocketMQListener<MessageExt> {

    @Autowired
    ServiceSwitchProducer serviceSwitchProducer;

    @SneakyThrows
    @Override
    public void onMessage(MessageExt messageExt) {
        String s = new String(messageExt.getBody(), "UTF-8");
        log.debug("收到消息:{}", s);

        JSONObject messageJson = JSONObject.parseObject(s);
        //避免空指针
        JSONObject serviceSwitchJson = Optional.ofNullable(messageJson).map(p -> p.getJSONObject("data"))
                .orElse(new JSONObject());

        serviceSwitchJson.put("respCode", "0");
        serviceSwitchJson.put("respMsg", "成功");
        serviceSwitchJson.put("respMsgEn", "SUCCESS");
        serviceSwitchJson.put("errorCode", "0");

        serviceSwitchProducer.sendMsg(serviceSwitchJson);
    }
}

ServiceSwitchProducer

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Service;

import java.util.Optional;
import java.util.UUID;

@Slf4j
@Service
public class ServiceSwitchProducer {

    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    /**
     * 组名
     */
    @Value("${rocketmq.producer.topicServiceSwitchResult}")
    String serviceSwitchResultTopic;

    /**
     * 发送消息
     *
     * @param serviceSwitchJson
     */
    public void sendMsg(JSONObject serviceSwitchJson) {

        log.debug("开始发送服务开/关结果消息");
        String spCategoryName = Optional.ofNullable(serviceSwitchJson).map(m -> m.getString("spCategoryName"))
                .orElse("video");

        JSONObject headers = new JSONObject();
        headers.put("messageTraceId", UUID.randomUUID());
        headers.put("messageSource", "project-service");
        headers.put("sourceTimeStamp", System.currentTimeMillis());
        headers.put("producerName", "project-service");
        headers.put("project_id", "project_id");

        JSONObject jsonObject = new JSONObject();
        jsonObject.put("data", serviceSwitchJson);
        jsonObject.put("headers", headers);

        Message<?> message = MessageBuilder.withPayload(jsonObject).build();

        log.debug("返回结果报文:{}", jsonObject);
        SendResult sendResult = rocketMQTemplate.syncSend(serviceSwitchResultTopic + ":" + spCategoryName, message);

        log.debug("发送结果:{}", sendResult);
    }
}
RocketMQ底层哪里用了Netty RocketMQ 的底层通信完全依赖于 Netty,无论是 NameServer、Broker、Producer 还是 Consumer,它们之间的通信都是通过 Netty 实现的。Netty 的高性能和灵活性为 RocketMQ 提供了强大的网络通信能力,使其能够支持高并发、低延迟的消息传递场景。 阅读详情

相关推荐

RocketMQ 中的 NettyRemotingAbstract 类

NettyRemotingAbstract 类主要负责封装与 Netty 相关的网络通信操作,将复杂的网络编程细节抽象化,使得 RocketMQ 的 Remoting 模块能够专注于消息协议处理和业务逻辑实现。它管理着 Netty 的 Channel、EventLoopGroup 等核心组件,提供了统一的消息发送、接收和处理接口,同时处理网络连接的建立、断开以及异常情况。

u013127325的博客 952

SpringBoot单机和分布式(RocketMQ解决)WebSocket聊天室

HTTP 协议有一个缺陷:通信只能由客户端发起。HTTP 协议做不到服务器主动向客户端推送信息。这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息。轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。因此,出现了 WebSocket。.........

weixin_47053123的博客 3277

SpringCloud Alibaba 实战之《消息队列:基于 RocketMQ 实现服务异步通信》

上一讲,我们讲解了分布式事务的解决方案以及 Seata 分布式事务中间件AT模式的实现原理,在后面的实战篇,我们还将围绕 Seata 进行进一步的学习。本讲我们先来介绍分布式架构下另外一块重要拼图:消息队列 RocketMQ。 本讲咱们将学习以下三方面内容: 介绍消息队列与 Alibaba RocketMQ; 掌握 RocketMQ 的部署方式; 讲解微服务接入 RocketMQ 的开发技巧; 首先咱们先来认识什么是消息队列 MQ 呢? 消息队列与 RocketMQ 消息队列 MQ 消息队列(M

小米吃辣椒的博客 582

(二十)ATP应用测试平台——websocket实现微服务版在线客服聊天室实战案例

在前面的博客内容中我们介绍了如何使用websocket实现一个网页版的在线客服聊天室,众所周知,由于websocket是一个长连接,要和服务端保持会话连接,所以其本身并不适用于微服务环境,在微服务环境中,有可能A、B俩个客户端连接到不同的服务A、B中,这样就没法保证A、B俩个客户端完成聊天的功能,因为会话不在同一台服务器上,A、B无法感知到对方发送的消息,为了解决websocket单机的这个痛点,我们引入消息中间键RocketMQ的广播机制,实现消息的转发,从而实现微服务版的websocke聊天室功能。

厉害哥哥的博客 2145

Spring Cloud Alibaba - RocketMQ Java:实现分布式消息队列的高效通信

消息队列是现代分布式系统中常用的通信机制,它能够解耦发送者和接收者之间的关系,提供高效、可靠的异步通信方式。我们通过添加依赖、配置RocketMQ、编写生产者和消费者的代码,实现了消息的发送和接收功能。通过使用RocketMQ的特性,我们可以实现Spring Cloud Alibaba - RocketMQ Java:实现高效的分布式消息队列通信。利用RocketMQ的特性,我们可以实现可靠的异步通信,提供高效的分布式系统架构。首先,我们需要在项目的构建文件中添加RocketMQ的依赖。

CyberNerdX的博客 153

Elasticsearch 8.17.1 JAVA工具类

整理了Elasticsearch8.17最新版的API工具类

weixin_39555954的博客 1125

用RocketMQ模拟IM的对话及群聊

1、P-〉P对话 Client端 consumergroup设为 user id topic 亦设为 user id tag可以设为 chat/att/img/notify/ord分别代表文字、附件、图片、通知、交易 producer发送时的topic为对方的user id,tag也按实际情况跟上面一样设置       若需要增加漫游功能(服务器记录对话内容),则需要在服务端

rocklee的专栏 5152

Cisco Packet Tracer 7.3免登录技巧:3种方法快速跳过注册界面(附详细截图)

本文针对Cisco Packet Tracer 7.3启动时遇到的登录界面问题,提供了三种合法高效的解决方案。详细介绍了如何利用官方访客模式快速启动、注册思科账号实现一劳永逸登录,以及通过调整本地安装配置优化启动流程,帮助网络学习者与备考者绕过繁琐步骤,快速进入实验环境。

weixin_29305337的博客 739

RocketMQ学习笔记 2

1. 案例介绍 1.1 业务分析 模拟电商网站购物场景中的【下单】和【支付】业务 1)下单 用户请求订单系统下单 订单系统通过RPC调用订单服务下单 订单服务调用优惠券服务,扣减优惠券 订单服务调用调用库存服务,校验并扣减库存 订单服务调用用户服务,扣减用户余额 订单服务完成确认订单 2)支付 用户请求支付系统 支付系统调用第三方支付平台API进行发起支付流程 用户通过第三方支付平台支付成功后,第三方支付平台回调通知支付系统 支付系统调用订单服务修改订单状态 支付系统调用积分服务添加积分 支付系

weixin_44533129的博客 612

精确时钟同步协议ptp/IEEE-1588v2协议-------(1)简介

ptp, 1588V2, IEEE-1588, 精确时钟同步协议

meihualing的专栏 5357

鸿蒙OpenHarmony技术:【Docker编译环境】

OpenHarmony为开发者提供了两种Docker环境,以帮助开发者快速完成复杂的开发环境准备工作。独立Docker环境:适用于直接基于Ubuntu、Windows操作系统平台进行版本编译的场景。基于HPM的Docker环境:适用于使用HPM工具进行发行版编译的场景。点击或者复制转到。表1Docker镜像介绍系统类型运行平台Docker镜像仓库标签标准系统(独立Docker环境)3.2小型系统(独立Docker环境)3.2轻量系统(独立Docker环境)3.2。

m0_62167422的博客 1445

使用消息队列、rocketMq实现通信

processResults 方法在一个独立的线程中持续运行。它会不断尝试从队列中获取并处理结果。当有结果时立即处理,没有结果时等待。这个方法会一直执行,直到 AsyncMessageHandler 被关闭。这种设计确保了:异步结果可以被及时处理,不会阻塞消息发送。系统资源得到有效利用,因为在没有结果时线程会等待而不是持续空转。结果处理的顺序性得到了保证。结合应用场景:

weixin_43930851的博客 1155

从STM32转战小华HC32F448:手把手教你搞定串口复用与超时中断(附完整代码)

本文详细介绍了从STM32迁移到小华HC32F448的串口开发实战指南,重点解析了HC32F448的GPIO复用系统和超时中断机制。通过对比STM32的架构差异,提供了完整的串口配置代码和优化方案,帮助开发者快速掌握HC32F448的串口通信技术,适用于工业控制等应用场景。

weixin_30564901的博客 549

基于 RocketMQ 的 Dubbo-go 通信新范式

RocketMQ 新功能尝鲜!让 Dubbo-go 通过 RocketMQ 进行 RPC 通信来扩展 Dubbo-go 的通信方式,利用 Dubbo-go 丰富的服务治理能力和 RocketMQ 稳定的 RPC 通信能力,两者强强联合,打造 RPC 通信新范式。

ApacheRocketMQ的博客 322

LCD工程师必看:MIPI DSI的LP/HS模式切换全流程拆解(附高通平台实测)

本文为LCD工程师深度解析MIPI DSI接口中低速(LP)与高速(HS)模式切换的全流程。文章结合高通平台实测波形,从协议状态机、时序关键参数到实战调试案例,系统拆解了模式切换的本质、协同机制及常见问题排查方法,重点阐述了LP模式在低功耗控制与HS模式在高速数据传输中的核心作用与切换时序。

weixin_29240711的博客 547

让闲置 MacBook 当 OpenClaw 主机:合盖运行 + 后台常驻

摘要 本文详细介绍如何将闲置MacBook改造为OpenClaw服务器,实现合盖后持续运行。首先推荐Ubuntu 22.04 LTS作为操作系统,提供详细的安装步骤和分区建议。重点介绍三种禁用合盖休眠的方法:修改systemd-logind配置、使用pm-utils工具以及调整GRUB设置。随后指导如何安装Docker并部署OpenClaw服务,包括创建docker-compose.yml文件和配置环境变量。最后说明如何设置系统服务实现OpenClaw开机自启。通过以上配置,可使MacBook在合盖状态下7

一键难忘的博客 4657

【RocketMq系列-01】RocketMq安装和基本概念

rocketmq安装和基本概念

zhenghuishengq的博客 899

3D深度饼图的QT实现

首先,我们需要创建一个QT项目并创建一个窗口,用于显示我们的饼图。在QT Creator中,选择创建一个新的QT Widgets应用程序项目,并创建一个新的窗口类。在本文中,我将介绍如何使用QT实现一个3D深度饼图(Pie 3D)的可视化效果。在构造函数中,我们将创建一个饼图(QChartView)并设置饼图的数据。这是一个简单的示例,您可以根据需要自定义和扩展代码来创建更复杂的饼图。现在,我们已经完成了3D深度饼图的QT实现。您将看到一个具有相应数据的3D深度饼图显示在窗口中。3D深度饼图的QT实现。

CodeJolt的博客 277

RocketMQ(一):领域模型(主题、队列、消息)备份

Apache RocketMQ是一款典型的分布式架构下的中间件产品,使用异步通信方式和发布订阅的消息传输模型。通信方式和传输模型的具体说明,请参考下文通信方式介绍和消息传输模型介绍。Apache RocketMQ产品具备异步通信的优势,系统拓扑简单、上下游耦合较低,主要用于异步解耦,流量削峰填谷等场景。分布式系统架构思想下,将复杂系统拆分为多个独立的子模块,例如微服务模块。此时就需要考虑子模块之间的远程通信,典型的通信模式分为以下两种:同步的RPC远程调用和基于中间件代理的异步通信方式。

geminigoth的博客 534

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[RocketMQ 消息队列异步通信]

《登鹳雀楼》 唐·王之涣 白日依山尽,黄河入海流。欲穷千里目,更上一层楼。

汤圆的博客 779

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

关于RocketMQ的使用

关于RocketMQ的使用 对于RocketMQ使用的话可以总结为3W1H 1、What(什么时候使用?) RocketMQ是阿里参照kafka(卡夫卡)思想设计的开源的使用java开发的一套消息中间件产品,主要是用于分布式场景下服务之间的通信。 2、Why(为什么要使用?) 相比http这种同步通信协议,mq是一套异步通信框架,可以用于服务之间的异步通信。这样的话,我们就可以使用MQ来削峰填谷、分布式事务等。 3、Where(在哪里使用?) 主要是用于分布式场景下,服务之间做异步通信的时候来使用。比如在

wangjianye0412的博客 250

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

使用docker运行RocketMQ

一、拉取RocketMQ镜像 docker pull apache/rocketmq //选择版本拉取 docker pull apache/rocketmq:4.7.1 二、运行容器,启动NameServer模块 Namesrv模块主要负责服务的寻址和注册,如果该模块不能够在节点中被正确定位。 整个RocketMQ的node都将无法正常工作。 因此,将RocketMQ的Namesrv模块启动并部署在Docker容器中,通过使用–net=host参数使得容器内和宿主机在同一个网络中,可以实现在宿主机的网

qq_51864596的博客 2651

Docker 部署 RocketMQ (图文并茂超详细)

使用 Docker 部署 RocketMQ 是一种高效便捷的方式,适合快速启动和管理分布式消息队列服务。首先,从 Docker Hub 拉取 RocketMQ 的官方镜像。RocketMQ 主要包括 NameServer 和 Broker 两个核心组件,因此需要分别启动对应的容器。通过命令行启动 NameServer 容器,配置必要的端口和网络设置。接着,启动 Broker 容器,配置连接到 NameServer 的地址,并指定数据存储路径等参数。 RocketMQ 容器在 Docker 的隔离环境中运行

人生需要动态规划 学习需要贪心算法 1万+

rocketmq的安装与使用

一、安装 官网:Quick Start - Apache RocketMQ 文档:rocketmq/docs/cn at master · apache/rocketmq · GitHub 下载 地址Apache Downloadshttps://www.apache.org/dyn/closer.cgi?path=rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zip 解压 配置环境变量 ROCKETMQ_HOME="D:\rocketmq".

weixin_61545091的博客 351

windows安装rocketmq服务_你必须要学会 微服务消息通信RocketMQ及分布式事务

hello大家好,我是阿七,前面我们学习了SpringCloud Alibaba的nacos、ribbon、feign、sentinel,那么今天来学习微服务中的消息通信以及微服务中的分布式事务。现在我们有这样一个业务需求,在内容中心审核分享的内容,一旦审核通过呢,给用户添加积分。这里就涉及到两个微服务,我们可以通过feign来调用,使用@Async异步注解来实现,那更高级一点的,我们使用MQ来做...

weixin_39755873的博客 187

RocketMQ是如何使用Netty框架的

Apache RocketMQ作为阿里开源的一款高性能、高吞吐量的分布式消息中间件,它的通信能力已得到业界的公认。它的通信层是借助于异常网络框架Netty实现的。在开发网络游戏的时候,Netty也常用于游戏服务器或网关的通信层框架,所以,可以通过学习RocketMQ是如何使用Netty框架,从中借鉴一此应用技巧。 在RocketMQ中的rocketmq-remoting项目就是针对网络层封装的项目...

王广帅--游戏开发-服务器开发 2351
上一篇: 对请求的参数进行验签
下一篇: LRU缓存实例
activety
博客等级 码龄7年 5粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值