JMS (тема) - как я могу реализовать клиента как производителя и потребителя

Мне нужно разработать приложение JMS с помощью activeMQ. У меня есть 2 клиента, которые должны действовать как издатели и подписчики. Например. если первый клиент рисует что-то, второй клиент должен видеть это в своем графическом интерфейсе, и наоборот.

Как "привязать" к серверу и как запустить activeMQ мне понятно, только не знаю как спроектировать клиент, где запускать SWING и как пересылать отрисовку. НАПРИМЕР. Продюсер выглядел бы так...

public class Producer {

private static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
private static String subject = "DRAWINGS";

public static void main(String[] args) throws JMSException {
    ConnectionFactory connectionFactory =
        new ActiveMQConnectionFactory(url);
    Connection connection = connectionFactory.createConnection();
    connection.start();

    Session session = connection.createSession(false,
        Session.AUTO_ACKNOWLEDGE);

    Destination destination = session.createTopic(subject);

    MessageProducer producer = session.createProducer(destination);


   // how to implement producer as consumer as well and where to create the SWING

   // and bind it to the client?


    connection.close();
}

}


person madalina c.    schedule 16.11.2012    source источник
comment
Мне очень нужна ваша помощь...   -  person madalina c.    schedule 16.11.2012


Ответы (1)


Вы создаете MessageConsumer так же, как вы создали свой MessageProducer, например:

    MessageConsumer consumer = session.createConsumer(destination);
    consumer.setMessageListener(new MessageListener() {
        public void onMessage(Message m) {
            // Do something.
        }
    });

Вам, конечно, нужно, чтобы ваш основной метод работал через цикл блокировки или что-то еще только для целей этого примера, но это основы.

person Tim Bish    schedule 16.11.2012
comment
Хорошо, это звучит хорошо. Но как сделать так, чтобы потребитель был производителем и наоборот? Например, у меня есть 2 клиента, и они публикуют и потребляют одновременно. - person madalina c.; 17.11.2012
comment
Гм, вы создаете MessageProducer и MessageConsumer в обоих, производите и позволяете асинхронному потребителю потреблять? - person Tim Bish; 17.11.2012
comment
Теперь я вижу свою ошибку. Я думал, что мой клиент — это объект producer класса MessageProducer, в то время как этот объект в основном просто средство для отправки сообщений моего клиента, верно? Тогда я могу создать как объект-издателя, так и объект-потребитель внутри моего клиентского класса, верно? Как насчет модуля SWING, следует ли мне интегрировать его в мои клиентские классы или сделать для него отдельный класс? Спасибо вам большое, иногда действительно нужен пинок! - person madalina c.; 17.11.2012
comment
Я понятия не имею о SWING. На самом деле это зависит от вашего приложения и его требований. Большинство людей обычно склонны инкапсулировать биты JMS внутри классов-оболочек, которые предоставляют интерфейсы, чтобы упростить их бизнес-логику. Все зависит от того, что нужно вашему приложению. - person Tim Bish; 17.11.2012