You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by "hebing (JIRA)" <ji...@apache.org> on 2016/08/23 09:03:20 UTC

[jira] [Commented] (APLO-370) Durable subscriptions can not work sometimes

    [ https://issues.apache.org/jira/browse/APLO-370?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15432437#comment-15432437 ] 

hebing commented on APLO-370:
-----------------------------

i solved it by recomplie the mqtt.jar。the reason is that when you reconnect it with cleanSession = false,
service will not release last connect ,there will be two(maybe more)Session (more info see Sink.scala) for same address, 
when current working session is wrong,it will lose message, a simple way to solved it by create new SessionState for every connect:

modified the MqttSessionManager.java in attach method,change it to :
 
							SessionState state;
							//always create a SessionState for incomming connect,if you want to remain data from cache ,copy it
                            if (true || handler.connect_message.cleanSession()) {
                                state = host_state.session_states.remove(client_id);
                                if (state == null) {
                                    state = new SessionState();
                                }
                            } else {
                                state = host_state.session_states.get(client_id);
                                if (state == null) {
                                    state = new SessionState();
                                    host_state.session_states.put(client_id, state);
                                }
                            } 

i am not good at scala & english,so i simple do this,hope it work for you and someone can find best way of it. 

> Durable subscriptions can not work sometimes
> --------------------------------------------
>
>                 Key: APLO-370
>                 URL: https://issues.apache.org/jira/browse/APLO-370
>             Project: ActiveMQ Apollo
>          Issue Type: Bug
>          Components: apollo-mqtt
>    Affects Versions: 1.7
>         Environment: centos 6.5
>            Reporter: wanged
>
> I use durable subscriptions for mqtt. when the client connected and subscripted, sometimes receive message from dsub, sometimes not receive message(at this time dsub has messages, unless the client disconnect and reconnect) .
> my config is:
> <broker xmlns="http://activemq.apache.org/schema/activemq/apollo" validation="strict">
>   <log_category console="console" security="security" connection="connection" audit="audit"/>
>   <authentication domain="apollo"/>
>   <access_rule allow="admins" action="*"/>
>   <access_rule allow="*" action="connect" kind="connector"/>
>   <auto_gc interval="60" />
>   <virtual_host id="yey">
>     <host_name>localhost</host_name>
>     <host_name>127.0.0.1</host_name>
>     <access_rule allow="apps" action="connect create receive consume"/>
>     <access_rule allow="mgts" action="connect create send receive consume"/>
>     <dsub tail_buffer="10k" full_policy="drop head" auto_delete_after="0" quota="102400"/>
>     <leveldb_store directory="/data/apollo/data"/>    
>   </virtual_host>
>   <web_admin bind="http://localhost:61680"/>
>   <connector id="tcp" bind="tcp://0.0.0.0:1883" protocol="mqtt">
>     <mqtt max_message_length ="10240" />
>   </connector>
>   <key_storage file="${apollo.base}/etc/keystore" password="password" key_password="password"/>
> </broker>



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)