One other problem with the implementation: you provided a MessageListener of your own definition, which doesn't do anything, which means your consumer has no way to get the messages. A better alternative would be to have your register method take the MessageListener object (of the consumer's definition, not your own) as an argument.
Tim On Aug 18, 2017 1:02 PM, "Justin Bertram" <jbert...@redhat.com> wrote: > > I can't see any reason why anyone would ever not want to use ActiveMQ ;) > > I agree. However, based on his code he's using 5.x right now, and I can > imagine a day when he'd want to move to ActiveMQ Artemis. :) > > > Justin > > On Fri, Aug 18, 2017 at 1:59 PM, Timothy Bish <tabish...@gmail.com> wrote: > > > On 08/18/2017 02:49 PM, Justin Bertram wrote: > > > >> I see a couple of potential problems with this code: > >> > >> 1) It's littered with non-JMS code (e.g. ActiveMQConnectionFactory, > >> ActiveMQConnection). You may not care about that if this application > will > >> only ever integrate with ActiveMQ, but if you think you'll ever want to > >> use > >> any other kind of JMS broker then you'll have to rewrite some of this > >> stuff > >> when you migrate. APIs are standardized for a reason. Deviate at your > >> own > >> risk. > >> > > > > I can't see any reason why anyone would ever not want to use ActiveMQ ;) > > > > > > > >> 2) Every time you invoke register() you create a new Connection, > Session, > >> Consumer, etc. This is an anti-pattern. Connection objects are "heavy" > >> and are meant to be shared. > >> > >> 3) You do not keep track of any of the resources you create (i.e. > >> Connection, Session, Consumer) so you have no way to clean them up. > >> > >> > maybe the strcture is not good at all > >> > >> I'd agree with that. > >> > >> > >> Justin > >> > >> On Fri, Aug 18, 2017 at 12:59 PM, Juleian <julian.herb...@gmx.net> > wrote: > >> > >> That sounds reasonable actually. The only problem I also somehow have is > >>> when > >>> register is called the method "is stuck" in the thread that is opened > or > >>> not? I do not see how I can return a value with this structure (maybe > the > >>> strcture is not good at all, its my first real programming task). > >>> > >>> public register(String topicName) { > >>> > >>> > >>> > >>> > >>> > >>> try { > >>> > >>> // create connection to Broker, create Session > >>> and > >>> Consumer > >>> > >>> ActiveMQConnectionFactory connectionFactory = > >>> new > >>> ActiveMQConnectionFactory( > >>> "tcp://localhost:61616"); > >>> ActiveMQConnection connection = > >>> (ActiveMQConnection) > >>> connectionFactory.createConnection(); > >>> connection.start(); > >>> Session session = > connection.createSession(false > >>> , > >>> Session.AUTO_ACKNOWLEDGE); > >>> Topic topicObject = > >>> session.createTopic(topicName) > >>> ; > >>> MessageConsumer consumer = > >>> session.createConsumer( > >>> topicObject); > >>> > >>> > >>> //check if topic is available on Broker > >>> > >>> > >>> > >>> DestinationSource ds = connection. > >>> getDestinationSource(); > >>> > >>> Set<ActiveMQTopic> topics = ds.getTopics(); > >>> String compare = topicName; > >>> int count = 0; > >>> > >>> for(ActiveMQTopic topic : topics){ > >>> > >>> > >>> > >>> if(compare.equals(topic.getTopicName())) > { > >>> > >>> System.out.println("Found " + > >>> topic.getTopicName()); > >>> count = count + 1; > >>> > >>> > >>> } > >>> > >>> } > >>> > >>> if(count == 0){ > >>> > >>> > >>> System.out.println("The topic you want > >>> to > >>> subscribe to is not > >>> found."); > >>> System.out.println("Please try again > >>> with > >>> a valid topic name."); > >>> > >>> return; > >>> > >>> } > >>> > >>> > >>> > >>> > >>> //register Component at mongoDB > >>> > >>> > >>> > >>> MessageListener listner = new > MessageListener() > >>> { > >>> > >>> @Override > >>> public void onMessage(Message > message) > >>> { > >>> try { > >>> if (message instanceof TextMessage) { > >>> TextMessage textMessage = (TextMessage) > >>> message; > >>> System.out.println("Received message : " > >>> + textMessage.getText() + "'"); > >>> } > >>> } catch (JMSException e) { > >>> System.out.println("Caught:" + e); > >>> } > >>> } > >>> }; > >>> consumer.setMessageListener(listner); > >>> > >>> try { > >>> System.in.read(); > >>> } catch (IOException e) { > >>> } > >>> > >>> } catch (JMSException ex) { > >>> // Logger.getLogger(Consumer.class.getName()).log(Level. > >>> SEVERE, > >>> null, ex); > >>> > >>> } > >>> > >>> > >>> > >>> } > >>> > >>> > >>> > >>> > >>> -- > >>> View this message in context: http://activemq.2283324.n4. > >>> nabble.com/Close-message-listener-decoupled-tp4729814p4729816.html > >>> Sent from the ActiveMQ - User mailing list archive at Nabble.com. > >>> > >>> > > -- > > Tim Bish > > twitter: @tabish121 > > blog: http://timbish.blogspot.com/ > > > > >