2010-02-23 33 views
7

Tôi không thể hiểu cách sử dụng ActiveMQ không cục bộ.
Giả sử tôi có 2 máy, cần trao đổi một số tin nhắn.
Trên trên máy tôi bắt đầu môi giới ActiveMQ:Làm cách nào để sử dụng activemq không cục bộ?

> ~/bin/activemq 

và sử dụng cái gì đó như:

javax.naming.Context ctx = new InitialContext(); 

    TopicConnectionFactory factory = (TopicConnectionFactory)ctx.lookup("connectionFactory"); 
    conn = factory.createTopicConnection(); 

    TopicSession session = conn.createTopicSession(false,TopicSession.AUTO_ACKNOWLEDGE); 
    Topic topic = null; 
    try{ 
     topic = (Topic)ctx.lookup("MyTopic"); 
     System.out.println("MyTopic was found"); 
    }catch(NameNotFoundException nnfe){ 
     topic = session.createTopic("MyTopic"); 
     System.out.println("MyTopic was created"); 
    } 
    TextMessage textMessage = session.createTextMessage(); 
    TopicPublisher publisher = session.createPublisher(topic); 
    conn.start(); 

    textMessage.setText("My topic message number"); 
    publisher.publish(textMessage); 
    System.out.println("sendMessage2topic"); 

nơi trong jndi.properties tôi có:

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory 
java.naming.provider.url = tcp://localhost:61616 

Nhưng những gì tôi nên tạo trên máy khác để đăng ký về chủ đề này? Shoul Tôi tạo môi trường ActiveMQ cục bộ thứ hai ont máy thứ hai, và cách đăng ký vào chủ đề từ xa trên máy đầu tiên ???

Trả lời

6

Dòng này ...

java.naming.provider.url = tcp://localhost:61616 

... nói connectionFactory bạn để kết nối với giao diện loopback. Bạn có thể chỉ định địa chỉ ở đây của nhà môi giới từ từ xa.

Trong trường hợp này, đoạn mã của bạn sẽ gửi tin nhắn đến nhà môi giới từ xa. Bây giờ nó là lên đến môi giới để phân phối các tin nhắn trên các thuê bao đăng ký (cả hai địa phương và từ xa những người thân).

Trong trường hợp này không có nhà môi giới nào được tạo (không cục bộ hoặc từ xa). Bạn chỉ cần kết nối với nhà môi giới hiện tại. Tất nhiên, bạn cũng có thể tạo một nhà môi giới địa phương và cấu hình nó để định tuyến các tin nhắn đến một remote (ví dụ, bạn có thể thực hiện nó thông qua vận chuyển mạng tĩnh/động hoặc giao thức truyền tải mạng ngang hàng). ActiveMQ cung cấp cho bạn rất nhiều các cấu trúc liên kết và mẫu - nhưng trước tiên bạn phải xác định những gì thực sự bạn muốn đạt được.

+0

Đó không phải là URL thực hiện kết nối JNDI? URL không kết nối với nhà môi giới có được nhúng trong đối tượng ConnectionFactory không? –

6

localhost: 61616 sẽ làm cho activeMQ chỉ nghe trên giao diện loopback (127.0.0.1). Sử dụng IP của máy hoặc 0.0.0.0 thay thế.

+0

ok, trên máy tôi sẽ sử dụng IP của máy đầu tiên, vấn đề BUT giống như trước đây: trên máy thứ hai tôi nên sử dụng cái gì? – rauch

+1

@rauch: Ý của tôi là trong tệp cấu hình ActiveMQ ** Broker **, trong phần tử transportConnector sử dụng tcp. Thuộc tính URI của transportConnector nên sử dụng IP thay vì localhost – Elister

+0

Đẹp nhất !! Hoàn toàn quên về "0.0.0.0". Bằng cách này bạn có thể sử dụng localhost trên máy chủ và bạn có thể kết nối bên ngoài với IP của máy chủ quá! –

1

Bạn cần sử dụng một cái gì đó như dưới đây. thay thế ipaddress bằng ip mục tiêu bạn muốn sử dụng

java.naming.provider.url = tcp://172.16.202.168:61616 
Các vấn đề liên quan