package com.iplatform.tcp.config; import com.iplatform.core.PlatformConfiguration; import com.iplatform.tcp.lb.DefaultResponseWriter; import com.walker.push.rocketmq.RocketMQEnhanceTemplate; import com.walker.tcp.lb.ResponseWriter; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * 长连接负载方式时,启用MQ模板以及相关配置。 * @author 时克英 * @date 2023-09-26 */ @Configuration @ConditionalOnProperty(prefix = "iplatform.tcp", name = "load-balance-enabled", havingValue = "true", matchIfMissing = false) @ConditionalOnClass({RocketMQTemplate.class}) public class LoadBalanceMQConfig extends PlatformConfiguration { private RocketMQTemplate rocketMQTemplate; @Autowired public LoadBalanceMQConfig(RocketMQTemplate rocketMQTemplate){ this.rocketMQTemplate = rocketMQTemplate; } /** * 默认RocketMQ监听器配置,测试使用。正式需要删除 * @param connectionManager // * @param template * @return * @date 2023-09-27 */ // @Bean // public DefaultMqListener defaultMqListener(ConnectionManager connectionManager, RocketMQEnhanceTemplate template){ // DefaultMqListener listener = new DefaultMqListener(); // listener.setConnectionManager(connectionManager); // listener.setRocketMQEnhanceTemplate(template); // return listener; // } /** * 监听对象放在业务中处理,平台注释该对象,业务通过MQ接收其他节点发送的聊天消息。
* * 1)如果要在平台测试负责聊天,请放开注释,启用:SimpleMqListener * @date 2023-12-14 */ // @Bean // public SimpleMqListener simpleMqListener(ConnectionManager connectionManager){ // SimpleMqListener listener = new SimpleMqListener(); // listener.setConnectionManager(connectionManager); // return listener; // } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //~ 以下为正式配置,上面为测试内容。 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /** * 长连接响应消息写入通道具体实现。 *

目前在负载模式中,发送消息到MQ,因为LongConnectionMeta从Redis反序列化后,无法执行子类write,所以通过该对象完成写入。

* @return * @date 2023-09-27 */ @Bean public ResponseWriter responseWriter(){ return new DefaultResponseWriter(); } @Bean public RocketMQEnhanceTemplate rocketMQEnhanceTemplate(){ RocketMQEnhanceTemplate template = new RocketMQEnhanceTemplate(); template.setTemplate(this.rocketMQTemplate); // template.setEnabledIsolation(); // template.setEnvironmentName(); return template; } }