# 云雀消息服务-消息推送业务实现-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); ```