ActiveMQ + JMS

1 resposta
adolfo_eloy

Olá pessoal.

Antes de mais nada, já adianto que procurei por palavras chave tanto neste fórum quanto no google e não encontrei nada
muito animador em termos de tutoriais, exemplos, e documentação. A documentação do próprio site do activeMQ não me ajudou o suficiente.
Caso não puderem me ajudar diretamente com minha dúvida, por favor, caso puderem informar links, livros pois qualquer ajuda será válida.

Bom, estou tentando desenvolver uma aplicação simpes com um Sender e um Receiver
com activeMQ tudo na mesma máquina e com configuração padrão. (não alterei nada no activemq.xml do diretório conf).
Estou testando um exemplo que peguei na internet. Abaixo o código do Receiver

package testesmq;

import org.apache.activemq.*;
import org.apache.activemq.broker.BrokerService;
import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.ExceptionListener;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
/**
* Hello world!
*/
public class Receiver {
    
    private static String host = "192.168.8.91";
    private static String port = "61616";
    private static String queue_name = "SERVER.TEST";
    
    public static void main(String[] args) throws Exception {
        thread(new StartBroker(), true);
        while(true){
            thread(new StartConsumer(), false);
            Thread.sleep(5000);
        }
    }
    public static void thread(Runnable runnable, boolean daemon) {
        Thread brokerThread = new Thread(runnable);
        brokerThread.setDaemon(daemon);
        brokerThread.start();
    }
    
    public static class StartBroker implements Runnable {
    
        public StartBroker() {
        }

        public void run() {
            try{
                BrokerService broker = new BrokerService();
                // configure the broker
                broker.addConnector("tcp://"+host+":"+port+"");
                broker.start();
            }catch(Exception e){
                System.out.println("Caught: " + e);
                e.printStackTrace();
            }
        }
    }
    
    public static class StartConsumer implements Runnable, ExceptionListener {
        public void run() {
            try {
                // Create a ConnectionFactory
                ActiveMQConnectionFactory connectionFactory = new
                ActiveMQConnectionFactory("tcp://"+host+":"+port+"");
                // Create a Connection
                Connection connection = connectionFactory.createConnection();
                connection.start();
                connection.setExceptionListener(this);
                // Create a Session
                Session session = connection.createSession(false,
                Session.AUTO_ACKNOWLEDGE);
                // Create the destination (Topic or Queue)
                Destination destination =
                session.createQueue(queue_name);
                // Create a MessageConsumer from the Session to the Topic or Queue
                MessageConsumer consumer =
                session.createConsumer(destination);
                // Wait for a message
                Message message = consumer.receive(1000);  

                onMessage(message);
                consumer.close();
                session.close();
                connection.close();
            } catch (Exception e) {
                System.out.println("Caught: " + e);
                e.printStackTrace();
            }
        }

        public void onMessage(javax.jms.Message jmsMessage) {
            try {
                if (jmsMessage instanceof TextMessage) {
                    TextMessage textMessage = (TextMessage)
                    jmsMessage;
                    String text = textMessage.getText();
                    System.out.println("Received: -" + text);
                    if(text.contains("address")){
                        System.out.println(">>> Sending...");
                        BkgProcess bp = new BkgProcess(text.substring(8));
                        bp.StartBkgProcess();
                    }
                }
            } catch(javax.jms.JMSException ex) {
                ex.printStackTrace();
            } catch (Exception e) {            
                e.printStackTrace();
            }
            
        }
        
        public synchronized void onException(JMSException ex) {
            System.out.println("JMS Exception occured. Shutting down client.");
        }
    }
}

e qdo executo o Receiver que será um listener, recebo o seguinte erro:

Caught: java.io.IOException: Failed to bind to server socket: tcp://192.168.8.91:61616 due to: java.net.BindException: Address already in use
java.io.IOException: Failed to bind to server socket: tcp://192.168.8.91:61616 due to: java.net.BindException: Address already in use
        at org.apache.activemq.util.IOExceptionSupport.create(IOExceptionSupport.java:33)
        at org.apache.activemq.transport.tcp.TcpTransportServer.bind(TcpTransportServer.java:108)
        at org.apache.activemq.transport.tcp.TcpTransportFactory.doBind(TcpTransportFactory.java:56)
        at org.apache.activemq.transport.TransportFactory.bind(TransportFactory.java:106)
        at org.apache.activemq.broker.BrokerService.createTransportConnector(BrokerService.java:1544)
        at org.apache.activemq.broker.BrokerService.addConnector(BrokerService.java:187)
        at org.apache.activemq.broker.BrokerService.addConnector(BrokerService.java:177)
        at testesmq.Receiver$StartBroker.run(Receiver.java:45)
        at java.lang.Thread.run(Thread.java:595)
Caused by: java.net.BindException: Address already in use
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:359)
        at java.net.ServerSocket.bind(ServerSocket.java:319)
        at java.net.ServerSocket.<init>(ServerSocket.java:185)
        at javax.net.DefaultServerSocketFactory.createServerSocket(ServerSocketFactory.java:169)
        at org.apache.activemq.transport.tcp.TcpTransportServer.bind(TcpTransportServer.java:104)
        ... 7 more

Obrigado a todos.

[]'s

1 Resposta

Nelsinho

Bom dia…

Já deu uma olhada no diretório %ACTIVEMQ_HOME%\example.

t+

Criado 5 de março de 2008
Ultima resposta 21 de abr. de 2008
Respostas 1
Participantes 2