Closed a386572631 closed 1 week ago
2.6.0的版本可以通过下面的方式修改下发的消息,可以试一下
public void sendEntity(Entity entity) {
//这里需要指定Class用于数据转发之后的反序列化
ObjectMessage message = new ObjectMessage(entity, Entity.class);
concept.send(message);
}
//注入一个编解码适配器给每个消息设置不同的数据
@Component
public class WsEntityCodecAdapter extends WebSocketMessageCodecAdapter {
@Override
public MessageEncoder getClientMessageEncoder(MessageEncoder encoder) {
//自定义编码器
return new EntityMessageEncoder(encoder);
}
@RequiredArgsConstructor
public static class EntityMessageEncoder implements MessageEncoder {
private final MessageEncoder encoder;
@Override
public Object encode(Message message, Connection connection, ConnectionLoadBalanceConcept concept) {
Object payload = message.getPayload();
//如果是实体对象
if (payload instanceof Entity) {
//新建一个实体对象设置内容以及编号
Entity newEntity = new Entity();
newEntity.setContent(((Entity) payload).getContent());
newEntity.setId(UUID.randomUUID().toString());
//新建一个消息对象设置消息头和新实体对象
ObjectMessage newMessage = new ObjectMessage();
newMessage.getHeaders().putAll(message.getHeaders());
newMessage.setPayload(newEntity);
//传入新消息对象
return encoder.encode(newMessage, connection, concept);
}
return encoder.encode(message, connection, concept);
}
}
}
依赖名称:
依赖版本: 2.5.0
问题描述: 批量发送的时候,concept.send(..)的消息体每个人收到都是一样的,但应该是需要不一样的,因为需要额外在消息体内放一个类似消息记录编号的属性,用来做已读回执。
异常堆栈:
代码示例: