# GMessage **Repository Path**: dwdyoung/gmessage ## Basic Information - **Project Name**: GMessage - **Description**: 用于实现统一的MQTT消息及WEBSOCKET等连接方式的消息,并且自动生成接口文档 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-07-04 - **Last Updated**: 2025-12-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于公信内部协议开发的消息发送框架 ## 使用示例 建立消息发送器 ~~~ java @GMessage(firstCmd = "test", note = "测试用的消息") public interface DemoSender { /** * 向域=${roomKey}的区域发送消息 */ @GSender(subCmd = "sub_test", note = "消息发送", summary = "详细说明,接口的内容支持用html标签实现简单样式(markdown自带)", zoomDescribe = ZoomDescribe.ALL) void sendTest( @GZoom String roomKey, @GArgsParam(value = "message", note = "消息") TestMessagePo message, @GArgsParam(value = "sender", note = "发送人", demo = "邓某") String sender, @GArgsParam(value = "number", note = "数字", demo = "邓某") int number); } ~~~ 建立消息接收器 ~~~ java /** * 接收器示例 */ @GMessageReceiver(firstCmd = "test", subCmd = "sub_test") public void receiverTest( @GZoom String roomKey, @GArgsParam(value = "message", note = "消息") TestMessagePo message, @GArgsParam(value = "sender", note = "发送人", demo = "邓某") String sender, @GArgsParam(value = "number", note = "数字", demo = "邓某") int value){ log.info("接收到 {}, {}, {}, {}", roomKey, message, sender, value); } ~~~

启用websocket ~~~ java @Configuration @EnableWebSocket public class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } } ~~~

配置mqtt参数 ~~~ yml # MQTT配置 spring: mqtt: username: admin password: admin url: tcp://127.0.0.1:1883 client: id: mqttId_2 default: topic: topic #个推设置 gview: tempPath: C:/files ~~~

注入消息发送器对象并使用 ~~~ java @RestController @RequestMapping("/api/test") public class TestController { // 注入消息发送器 @Autowired private DemoSender demoSender; @GetMapping() public String send(){ // 直接调用方法 TestMessagePo message = new TestMessagePo(); message.setContent("test_content"); demoSender.sendTest("test_zoom", message); return "ok"; } } ~~~ 以上sendTest方法会向客户端实际发送内容: ~~~ json { "head":"gonsin", "cmd":{ "firstcmd":"test", "subcmd":"sub_test", "response":0 }, "args":{ "message": { "content": "test_content" } } } ~~~

## 快速入门 为了方便记忆,所有批注均以G开头,例如@GMessage、@GSender 等
### 添加依赖 ~~~ xml com.gonsin gmessage_logic 1.0.0 ~~~ ### ### 初始化 ~~~ java // 扫描包名 @GMessageScan("扫描@GMessage的包名") // 启用GMessage @EnableGMessage public class Application { public static void main(String[] args){ // ... 启动部分省略 } } ~~~

### @GMessage 标注在interface的接口上 |参数|含义 |-|-| |firstCmd|该发送器里面所有消息的的firstCmd |node|该发送器的说明

### @GSender 标注在@GMessage接口的每个方法上,所有的接口都 |参数|含义 |-|-| |subCmd|该消息的subCmd参数值 |node|该发送器的说明

### @GZoom 标注该消息发送的区域,标注在发送参数上

### @GArgsParam 标注在参数上,最终会传递到消息体里的args参数 |参数|含义 |-|-| |value|参数的名字

### @GArgsBody 标注在方法上,最终会args会以整个对象的形式传递

### 接收 Terminal 信息 ``` java /** * 接收Terminal信息 * terminal信息只有终端发起的请求时候,才有信息 */ @GMessageReceiver(firstCmd = "test", subCmd = "sub_test") public void terminalTest( @GZoom String roomKey, @GArgsParam(value = "message", note = "消息") TestMessagePo message, @GArgsParam(value = "sender", note = "发送人", demo = "邓某") String sender, @GArgsParam(value = "number", note = "数字", demo = "邓某") int value, /**直接在接收方法里增加 TerminalInfo 类型的参数就可以接收terminal信息**/ TerminalInfo terminalInfo ){ log.info("接收到 {}, {}, {}, {}", roomKey, message, sender, value); } ```

## 未来计划 - [ ] 异步发送和同步发送 - [x] GMessageReciver接收器