# 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接收器