Tôi có một hàng đợi JMS được cấu hình trên máy chủ thủy tinh từ xa. Tôi đang cố gắng để kết nối hàng đợi này từ máy địa phương của tôi. Có thể kết nối trực tiếp với máy chủ này hoặc tôi cần kết nối qua một số nhà môi giới/đại lý không? Làm thế nào nó hoạt động? (Tôi tươi trong khu vực JMS) Rất cám ơnkhách hàng cho hàng đợi JMS từ xa
Trả lời
Nếu ứng dụng khách của bạn đang chạy bên ngoài Glassfish đây là một ví dụ mã đơn giản cho một ứng dụng khách mở.
Để có được nó để làm việc, bạn sẽ cần phải tham khảo 2 lọ openmq từ glassfishInstall/mq/lib thư mục - imq.jar và jms.jar
import com.sun.messaging.ConnectionConfiguration;
import com.sun.messaging.ConnectionFactory;
import com.sun.messaging.Queue;
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session;
public class TestJmsClientStandalone2 {
public static void main(String[] args) throws JMSException
{
ConnectionFactory connFactory = new ConnectionFactory();
connFactory.setProperty(ConnectionConfiguration.imqAddressList, "remotehostip:7676");
Queue myQueue = new Queue("myRemoteQueue");
try (Connection connection = connFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(myQueue)) {
Message message = session.createTextMessage("this is my test message");
producer.send(message);
}
}
}
Tôi không có kinh nghiệm với Glassfish, nhưng kịch bản này không làm việc với JBoss (mà tích hợp JBossMQ), và nó phải được áp dụng chung cũng như:
máy chủ :
- cấu hình server: Tạo hàng đợi, và gắn nó vào một tên để được nhìn thấy trong JNDI cấu hình
- server: Hãy chắc chắn rằng các nhà máy kết nối có thể nhìn thấy trong JNDI cũng
Chủ đầu tư:
- Lookup cả nhà máy kết nối và hàng đợi sử dụng JNDI. Điều này có thể yêu cầu một số giá trị được đưa vào các thuộc tính cho
InitialContext
- Trên đầu trang của nhà máy kết nối và hàng đợi, bạn có thể xây dựng các đối tượng khác (kết nối hàng đợi/phiên/người nhận).
Đối với JBoss nó trông như thế này:
final Properties initialContextProperties = new Properties();
initialContextProperties.put("java.naming.factory.initial",
"org.jnp.interfaces.NamingContextFactory");
initialContextProperties.put("java.naming.provider.url",
"jnp://localhost:1099");
//
final InitialContext ic = new InitialContext(initialContextProperties);
final QueueConnectionFactory qcf = (QueueConnectionFactory) ic
.lookup("XAConnectionFactory");
final Queue queue = (Queue) ic.lookup("queue/A");
Vì vậy, các nhà môi giới/đại lý phải đi qua là JNDI.
Ứng dụng khách của bạn có đang chạy trong một cá thể thủy tinh địa phương và cố gắng kết nối với tài nguyên JMS của cá thể thủy tinh từ xa không?
Nếu có thì tôi đã tìm thấy 2 cách để thực hiện việc này. Đối với cả hai tùy chọn thiết lập cùng một nhà máy kết nối và đích (hàng đợi) Tài nguyên JMS trong các cá thể thủy tinh từ xa và địa phương.
1) Đặt kết nối JMS nhà máy sở hữu "addressList"
Trong các khách hàng glassfish quản trị giao diện điều khiển đi đến Resources->JMS Resources->Connection Factories->jms/YourConnectionFactory->Additional Properties
Thêm một tài sản bổ sung với tên addressList và giá trị so XX.XX .XX.XX: YYYY trong đó giá trị là địa chỉ IP của máy từ xa và số cổng mà dịch vụ JMS đang chạy.
hoặc
2) Đặt glassfish khách hàng dịch vụ tin nhắn Java để kết nối với glassfish xa
Trong các khách hàng glassfish quản trị giao diện điều khiển đi đến Configurations->server-config->Java Message Service
Loại
- Set JMS dịch vụ: REMOTE (nhấp vào lưu)
- Đặt JMS
Hosts->default_JMS_host
Địa chỉ IP và cổng làm Địa chỉ IP và cổng điều khiển từ xa thủy tinh dịch vụ JMS
Tôi đã thử nghiệm cả hai tùy chọn để làm việc với Glassfish 4. Hy vọng nó sẽ giúp.