# 云雀消息服务-消息推送业务实现-java版
**Repository Path**: wokaixin/yunque-message-client-java
## Basic Information
- **Project Name**: 云雀消息服务-消息推送业务实现-java版
- **Description**: 云雀消息推送服务系统 -推送消息业务实现 java版
作者 yichen email 2782268022@qq.com
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2023-09-24
- **Last Updated**: 2024-09-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
### 云雀消息服务-消息推送业务实现-java版
作者 yichen
email 2782268022@qq.com
### 安装方式1 git安装
```
git clone https://gitee.com/wokaixin/yunque-message-client-java.git
```
### 安装方式2 maven安装
```aidl
io.gitee.wokaixin
yunque-message-client
0.0.1-SNAPSHOT
```
>云雀主服务 websocket 链接服务端地址: https://gitee.com/wokaixin/yunque-socket.git
>云雀推消息业务实现 php版 https://gitee.com/wokaixin/yunque-message-client-php
>云雀推消息业务实现 java版 https://gitee.com/wokaixin/yunque-message-client-java
>云雀推消息业务实现 go版 https://gitee.com/wokaixin/yunque-message-client-go
### 使用
1、 pom文件添加
```aidl
io.gitee.wokaixin
yunque-message-client
0.0.1-SNAPSHOT
```
2、 springboot 启动类添加注解
```aidl
@ComponentScan(basePackages= {"io.gitee.wokaixin"})
```
3、 配置文件application.yml
添加 参考 resoures/config/application.yml 配置
```aidl
##消息服務器接口
message:
sendStatus:
fail:
isDelDb: true
# 推送驱动类型
driverType: redis
# redis 订阅消息推送配置
redis:
nodeName: redis-msg
# 订阅主题
channelName: message
isOpen: true
#数据库索引
host: 127.0.0.1 # Redis服务器地址
database: 2 # Redis数据库索引(默认为0)
port: 6379 # Redis服务器连接端口
username:
password: 123456 # Redis服务器连接密码(默认为空)
timeout: 3000 # 连接超时时间(毫秒)
kafka:
isOpen: true
# 订阅主题
topic: message
# 服务器地址
brokerList: 127.0.0.1:9092
metadataRefreshIntervalMs: 10000
isAsyn: false
brokerVersion: 0.10.2.1
requiredAck: 1
produceInterval: 500
```
4、项目中配置
需要用用 io.gitee.wokaixin.yunque.message.example 示例目录三个文件。复制到项目中使用。
然后在你需要的位置
```aidl
@Autowired
private MessageI messageService;
# 即可调用推送方法 replyBodyService.send(xxx)等
```
或者
```aidl
@Autowired
private ReplyBodyService replyBodyService;
# 即可调用推送方法 messageService.send(xxx)等
```
### 调用方式 参考 test类
```aidl
//@ComponentScan
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SampleClass.class)
@AutoConfigureMockMvc
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
class MessageServiceImplTest {
@Autowired
private MessageService messageService;
@Autowired
private DriverFactory driverFactory;
private MessagesPub.MessagesPubProto.Builder msgdata;
private Message.MessageProto.Builder msg;
Message.MessageProto.Builder newMsg(Long Id, String receiver, String sender, String text) {
Message.MessageProto.Builder msg = Message.MessageProto.newBuilder();
msg.setId(Id);
msg.setSender(receiver);
msg.setReceiver(sender);
msg.setSendTime(new DateTime().getTime() / 1000);
msg.putContent("text", text);
return msg;
}
// 封装消息体
@BeforeEach
void setUp() {
MessagesPub.MessagesPubProto.Builder msgdata = MessagesPub.MessagesPubProto.newBuilder();
System.out.println("这是个测试方法");
Message.MessageProto.Builder msg = newMsg(1l, "1074", "1078", "哈喽,这是第一条消息");
this.msg = msg;
msgdata.setSid("beijing1");
msgdata.addMsg(msg);
this.msgdata = msgdata;
}
//发给所有人
@Test
void sendAll() {
boolean e = messageService.sendAll(this.msgdata);
System.out.println(e);
}
// 推送给指定人
@Test
void sendUid() {
boolean e = messageService.sendUid(this.msgdata, "1074");
System.out.println(e);
}
// 遍历消息 推送给读消息人
@Test
void sendList() {
this.msgdata.addMsg(newMsg(2l, "1075", "1078", "哈喽,这是第二条消息"));
this.msgdata.addMsg(newMsg(3l, "1076", "1074", "哈喽,这是第三条消息"));
this.msgdata.addMsg(newMsg(4l, "1075", "1078", "哈喽,这是第四条消息"));
boolean e = messageService.sendList(this.msgdata);
System.out.println(e);
}
// 消息推给多个用户
@Test
void sendUids() {
String[] uids=new String[] {"1074","1075","1076"};
boolean e = messageService.sendUids(this.msgdata, uids);
System.out.println(e);
}
// 消息推给用户的某个设备
@Test
void sendUidDid() {
boolean e = messageService.sendUid(this.msgdata, "1076","h5");
System.out.println(e);
}
@Test
void redisDriver(){
driverFactory.createDriver("redis").sendTo(this.msgdata.build().toByteArray());
}
@Test
void kafkaDriver(){
driverFactory.createDriver("kafka").sendTo(this.msgdata.build().toByteArray());
}
}
```
### 实现客户端推送消息方法如下:
service.MessageService
```aidl
/***
* @author: yichen
* @Date: 2023/9/19 0019
* @Description: 每条消息推给所有人
* @param
* @return: null
**/
public boolean sendAll(MessagesPub.MessagesPubProto.Builder msg);
/***
* @author: yichen
* @Date: 2023/9/19 0019
* @Description: 遍历消息推送给每条消息的接收人
* @param
* @return: null
**/
public boolean sendList(MessagesPub.MessagesPubProto.Builder msg);
/***
* @author: yichen
* @Date: 2023/9/19 0019
* @Description: 遍历消息推送给指定接收人
* @param
* @return: null
**/
public boolean sendUid(MessagesPub.MessagesPubProto.Builder msg, String uid);
/***
* @author: yichen
* @Date: 2023/9/19 0019
* @Description: 遍历消息推送给指定接收人 的某个设备ID
* @param
* @return: null
**/
public boolean sendUid(MessagesPub.MessagesPubProto.Builder msg, String uid, String did);
/***
* @author: yichen
* @Date: 2023/9/19 0019
* @Description: 遍历消息推送给指定多个接收人
* @param
* @return: null
**/
public boolean sendUids(MessagesPub.MessagesPubProto.Builder msg, String[] uidlist);
```
### 实现客户端推送业务方法如下
service.ReplyBodyService
```aidl
/***
* @author: yichen
* @Date: 2023/9/19 0019
* @Description: 每条消息推给所有人
* @param
* @return: null
**/
public boolean sendAll(ReplyBodysPub.ReplyBodysPubProto.Builder msg);
/***
* @author: yichen
* @Date: 2023/9/19 0019
* @Description: 遍历消息推送给每条消息的接收人
* @param
* @return: null
**/
public boolean sendList(ReplyBodysPub.ReplyBodysPubProto.Builder msg);
/***
* @author: yichen
* @Date: 2023/9/19 0019
* @Description: 遍历消息推送给指定接收人
* @param
* @return: null
**/
public boolean sendUid(ReplyBodysPub.ReplyBodysPubProto.Builder msg, String uid);
/***
* @author: yichen
* @Date: 2023/9/19 0019
* @Description: 遍历消息推送给指定接收人 的某个设备ID
* @param
* @return: null
**/
public boolean sendUid(ReplyBodysPub.ReplyBodysPubProto.Builder msg, String uid, String did);
/***
* @author: yichen
* @Date: 2023/9/19 0019
* @Description: 遍历消息推送给指定多个接收人
* @param
* @return: null
**/
public boolean sendUids(ReplyBodysPub.ReplyBodysPubProto.Builder msg, String[] uidlist);
```