Có API nào để xóa thư khỏi hàng đợi JMS mà không sử dụng công cụ quản trị giám sát hay không.Cách xóa thư khỏi hàng đợi JMS
Trả lời
Đối tượng QueueBrowser có thể là thứ bạn cần. Tôi nghĩ rằng nó có phương pháp xóa (hoặc tương tự)
Không có API trực tiếp để xóa thư. Bạn có thể gọi phương thức queueReceiver.receive() để xóa một tin nhắn khỏi hàng đợi. QueueBrowser sẽ không xóa thư khỏi hàng đợi.
Chúng ta không thể làm gì nếu không có phương thức Receive.receive() ... – avikodak
Đây là điều tôi có thể làm việc:
Tôi giả sử bạn muốn xóa thư phù hợp với tiêu chí cụ thể.
Queue destination = session.createQueue("your_q");
QueueBrowser browser = session.createBrowser(destination);
Enumeration<?> enum1 = browser.getEnumeration();
while(enum1.hasMoreElements())
{
TextMessage msg = (TextMessage)enum1.nextElement();
if(msg.getStringProperty("any_prop").equals("some_prop"))
{
MessageConsumer consumer = session.createConsumer(destination, "id='" + msg.getStringProperty("id") + "'");
consumer.receive(1000);
}
}
Đây là điều mà tôi đã thực sự thử nghiệm thành công trên WebLogic:
destinationJNDI nên chứa tên JNDI của hàng đợi, như "[email protected]_Notifications.NLNotificationReprocessQ".
ctx phải là một InitialContext hợp lệ như:
Properties env = new Properties();
env.put(javax.naming.Context.PROVIDER_URL, PROVIDER_URL);
env.put(Context.SECURITY_PRINCIPAL, WL_USER);
env.put(Context.SECURITY_CREDENTIALS, WL_PASSWORD);
env.put(Context.INITIAL_CONTEXT_FACTORY, WL_INITIAL_CONTEXT_FACTORY);
InitialContext ctx = new InitialContext(env);
idlist phải là một danh sách CSV ID thông điệp mà bạn muốn xóa
này là mã:
javax.jms.Queue queue = (javax.jms.Queue) ctx.lookup(destinationJNDI.toString());
// lookup the queue connection factory
QueueConnectionFactory queueConnFactory = (QueueConnectionFactory) ctx.lookup(WEBLOGIC_JMS_XA_CONNECTION_FACTORY);
// create a queue connection
QueueConnection queueConn = queueConnFactory.createQueueConnection();
queueConn.start();
// create a queue session
Session queueSession = queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
for (String id : idlist.split(",")) {
if (id.startsWith("ID:")) {
MessageConsumer consumer = queueSession.createConsumer(queue, " JMSMessageID='" + id + "'");
Message message = consumer.receive(1000);
out.write("message = " + message + " ");
out.write("deleted ID " + id + " ");
}
}
queueSession.close();
queueConn.close();
tôi đã phải gọi thêm session.commit()
để người tiêu dùng xóa tin nhắn.
Ngoài ra, API receivenowait
không hoạt động; hãy gọi số receive(1000)
.
Đây là một mảnh làm việc mã tôi đã viết rằng làm việc trên jboss
:
try {
connection = connectionFactory.createConnection();
session = connection.createSession(true,-1);
Queue queue = (Queue) QueueConnectionFactory.getInitialContext().lookup("/queue/DLQ");
QueueBrowser browser = session.createBrowser(queue);
Enumeration<?> enum1 = browser.getEnumeration();
while(enum1.hasMoreElements()) {
TextMessage msg = (TextMessage)enum1.nextElement();
MessageConsumer consumer = session.createConsumer(queue, "JMSMessageID='" + msg.getJMSMessageID() + "'");
//You can try starting the connection outside while loop as well, I think I started it inside while loop by mistake, but since this code worked I am hence letting you know what worked
connection.start();
Message message = consumer.receive(1000) ;
if (message != null) {
//do something with message
}
}
}
finally {
session.commit();
consumer.close();
browser.close();
session.close();
connection.close();
}
- 1. Hàng đợi JMS đầy đủ
- 2. Đếm số lượng thư trong hàng đợi JMS
- 3. Làm thế nào để thanh lọc/xóa thư từ hàng đợi JMS weblogic
- 4. Xóa tệp khỏi hàng đợi tải lên?
- 5. Thêm Hàng đợi JMS vào Jboss 7
- 6. Hàng đợi từ xa JBoss JMS?
- 7. Hàng đợi JMS nhận được tin nhắn?
- 8. khách hàng cho hàng đợi JMS từ xa
- 9. Xóa một mục tùy ý khỏi hàng đợi ưu tiên
- 10. Giả lập hoặc mô phỏng Hàng đợi Tin nhắn (JMS)
- 11. Cách xóa hàng riêng lẻ khỏi GROUP_CONCAT?
- 12. Thông tin hàng đợi Hazelcast
- 13. Truy xuất thư từ hàng đợi RabbitMQ
- 14. Xóa hàng khỏi mảng php
- 15. Xóa Thư mục khỏi DDMS
- 16. cách xóa thư trong hàng đợi của nhà môi giới dịch vụ
- 17. Cách xóa hàng đợi đa xử lý trong python
- 18. Điều gì xảy ra trên hàng đợi JMS khi onMessage() ném một JMSException?
- 19. Làm thế nào để xóa các công việc Django RQ khỏi hàng đợi?
- 20. Khởi động lại hàng đợi thư ColdFusion
- 21. Xóa thư mục khỏi URL bằng
- 22. NServiceBus: Cách di chuyển thư từ hàng đợi lỗi
- 23. Những cạm bẫy tiềm năng trong việc sử dụng hàng đợi JMS?
- 24. Tkinter: Đợi mặt hàng trong hàng đợi
- 25. Gợi ý đối với Hàng đợi JMS và các quy ước đặt tên chủ đề
- 26. xóa các hàng khỏi nhiều bảng
- 27. Cách xóa hàng trùng lặp khỏi ma trận
- 28. Cách xóa hàng trùng lặp khỏi tuyên bố công đoàn
- 29. Làm cách nào để xóa các hàng khỏi DataGridView?
- 30. Cách xóa tất cả các hàng khỏi lưới Kendo
Tôi không nghĩ rằng có một phương pháp xóa trong QueueBrowser như xa như đọc từ các tài liệu java ... Queue trình duyệt duy nhất là được sử dụng để đọc hàng đợi – avikodak
Bạn nói đúng - nhưng tôi nhớ sử dụng QueueBrowser trong nội dung này. Nếu tôi nhớ đúng, tôi đã đếm các thông điệp trong Hàng đợi, lặp lại điều đó, và tiêu thụ thông điệp mà tôi quan tâm (và chỉ là không có gì với nó) – DaveH
Ok tôi sẽ xem xét nó ... nhưng tôi có một nhỏ doubht chúng ta có thể thay đổi tiêu đề của thông điệp khi chúng nằm trong hàng đợi ... để tôi có thể thay đổi thuộc tính "time_to_live" – avikodak