shikeyin
2024-01-11 65da8373531677b1c37a98f53eaa30c892f35e5a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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接收其他节点发送的聊天消息。<br>
     *
     * 1)如果要在平台测试负责聊天,请放开注释,启用:SimpleMqListener
     * @date 2023-12-14
     */
//    @Bean
//    public SimpleMqListener simpleMqListener(ConnectionManager connectionManager){
//        SimpleMqListener listener = new SimpleMqListener();
//        listener.setConnectionManager(connectionManager);
//        return listener;
//    }
 
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //~ 以下为正式配置,上面为测试内容。
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
    /**
     * 长连接响应消息写入通道具体实现。
     * <p>目前在负载模式中,发送消息到MQ,因为<code>LongConnectionMeta</code>从Redis反序列化后,无法执行子类write,所以通过该对象完成写入。</p>
     * @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;
    }
}