Hi I would suggest to connect() after ALL Consumers are started in doStart(). Is this approach feasible?
On 09.08.19 09:23, Claus Ibsen wrote: > Hi > > Ah yeah well spotted Willem. > > The endpoint should only call connection() when the 1st consumer is > being added, and then disconnect when the active consumer count hits > zero. So the endpoint needs to keep track on number of consumers > added/removed and react accordingly. > > On Fri, Aug 9, 2019 at 8:00 AM Willem Jiang <willem.ji...@gmail.com> wrote: >> >> I just checked the code of camel-mqtt code, and find a line[1] which >> could let to the issue that you face. >> If the endpoint is start and consumer is not start yet, the consumers >> could be empty, camel cannot send the exchange to right consumer to >> use. Maybe you can set a break or add some log to verify it. >> >> [1]https://github.com/apache/camel/blob/24521870b81576b5caf9ff3951cff8a0c2c77ab2/components/camel-mqtt/src/main/java/org/apache/camel/component/mqtt/MQTTEndpoint.java#L256-L263 >> >> Willem Jiang >> >> Twitter: willemjiang >> Weibo: 姜宁willem >> >> On Thu, Aug 8, 2019 at 2:45 PM Michael Zaugg <zaugg+ca...@puzzle.ch> wrote: >>> >>> Hi Willem >>> >>> It's camel version 2.24.0 >>> >>> We gracefully stopped the whole java process with the same result. >>> >>> "Sending PUBLISH to testclient" occurs before "Received SUBSCRIBE" >>> according to Mosquitto's log: >>> >>> 1565245897: New client connected from 172.17.0.1 as testclient (p1, c0, >>> k30). >>> 1565245897: No will message specified. >>> 1565245897: Sending CONNACK to testclient (0, 0) >>> 1565245897: Sending PUBLISH to testclient (d0, q2, r0, m2, 'testtopic', >>> ... (4 bytes)) >>> 1565245907: Received SUBSCRIBE from testclient >>> 1565245907: testtopic (QoS 2) >>> 1565245907: testclient 2 testtopic >>> 1565245907: Sending SUBACK to testclient >>> 1565245907: Received PUBREC from testclient (Mid: 2) >>> 1565245907: Sending PUBREL to testclient (m2) >>> 1565245907: Received PUBCOMP from testclient (Mid: 2, RC:0) >>> >>> KR >>> Michael >>> >>> On 08.08.19 03:13, Willem Jiang wrote: >>>> Hi >>>> >>>> Can I know which version of Camel are you using? >>>> I just checked the code of camel-mqtt, there are some changes to fix >>>> the connection related issues. >>>> I doubt that the connection is not full released in your case. >>>> Can you try to stop the camel application instead of stop the camel route? >>>> >>>> >>>> Willem Jiang >>>> >>>> Twitter: willemjiang >>>> Weibo: 姜宁willem >>>> >>>> On Wed, Aug 7, 2019 at 10:56 PM Michael Zaugg <zaugg+ca...@puzzle.ch> >>>> wrote: >>>>> >>>>> We're having difficulties with persistent clients (using >>>>> cleanSession=false). We would like to get messages that were sent while >>>>> our client was disconnected. >>>>> >>>>> Steps to reproduce: >>>>> 1. start route to create the initial subscription for the testclient >>>>> from("mqtt:bar?subscribeTopicName=testtopic&cleanSession=false&clientId=testclient&host=tcp://localhost:1883&qualityOfService=ExactlyOnce").transform(body().convertToString()).to("mock:test"); >>>>> >>>>> 2. stop route (disconnect from broker) >>>>> >>>>> 3. send message to testtopic with qos 2 using another client id (e.g. >>>>> from cli) >>>>> >>>>> 4. repeat step 1. to connect and re-subscribe to testtopic >>>>> >>>>> expected behaviour: >>>>> message delivered to mock endpoint (mock:test) >>>>> >>>>> actual behaviour: >>>>> publish (delivery) to testclient is shown in broker log (mosquitto) and >>>>> in trace of >>>>> fusesource MQTTEndpoint but message is not delivered to mock endpoint. >>>>> The subscription and hence the callback is not setup at the connect time. >>>>> >>>>> More or less same behaviour when paho client is used instead. >>> >>> -- >>> Michael Zaugg >>> Softwareingenieur >>> >>> Puzzle ITC GmbH >>> www.puzzle.ch >>> >>> Telefon +41 31 370 22 00 >>> Direkt +41 31 370 22 15 >>> Mobile +41 79 289 65 88 >>> Fax +41 31 370 22 01 >>> >>> Werfen Sie einen Blick in unseren Blog: >>> <http://www.puzzle.ch/blog> > > > -- Michael Zaugg Softwareingenieur Puzzle ITC GmbH www.puzzle.ch Telefon +41 31 370 22 00 Direkt +41 31 370 22 15 Mobile +41 79 289 65 88 Fax +41 31 370 22 01 Werfen Sie einen Blick in unseren Blog: <http://www.puzzle.ch/blog>