Có cách nào và cách (ngoài việc tiêu thụ thư) Tôi có thể xóa/xóa thư theo chương trình từ hàng đợi JMS. Ngay cả khi nó có thể bằng công cụ dòng lệnh wlst, nó sẽ có nhiều trợ giúp.Làm thế nào để thanh lọc/xóa thư từ hàng đợi JMS weblogic
Trả lời
Bạn có thể sử dụng JMX để xóa hàng đợi, hoặc từ Java hoặc từ WLST (Python). Bạn có thể tìm thấy các định nghĩa MBean cho WLS 10.0 trên http://download.oracle.com/docs/cd/E11035_01/wls100/wlsmbeanref/core/index.html. Dưới đây là một ví dụ Java cơ bản (đừng quên đặt weblogic.jar trong classpath):
import java.util.Hashtable;
import javax.management.MBeanServerConnection;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import javax.management.ObjectName;
import javax.naming.Context;
import weblogic.management.mbeanservers.runtime.RuntimeServiceMBean;
public class PurgeWLSQueue {
private static final String WLS_USERNAME = "weblogic";
private static final String WLS_PASSWORD = "weblogic";
private static final String WLS_HOST = "localhost";
private static final int WLS_PORT = 7001;
private static final String JMS_SERVER = "wlsbJMSServer";
private static final String JMS_DESTINATION = "test.q";
private static JMXConnector getMBeanServerConnector(String jndiName) throws Exception {
Hashtable<String,String> h = new Hashtable<String,String>();
JMXServiceURL serviceURL = new JMXServiceURL("t3", WLS_HOST, WLS_PORT, jndiName);
h.put(Context.SECURITY_PRINCIPAL, WLS_USERNAME);
h.put(Context.SECURITY_CREDENTIALS, WLS_PASSWORD);
h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "weblogic.management.remote");
JMXConnector connector = JMXConnectorFactory.connect(serviceURL, h);
return connector;
}
public static void main(String[] args) {
try {
JMXConnector connector =
getMBeanServerConnector("/jndi/"+RuntimeServiceMBean.MBEANSERVER_JNDI_NAME);
MBeanServerConnection mbeanServerConnection =
connector.getMBeanServerConnection();
ObjectName service = new ObjectName("com.bea:Name=RuntimeService,Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean");
ObjectName serverRuntime = (ObjectName) mbeanServerConnection.getAttribute(service, "ServerRuntime");
ObjectName jmsRuntime = (ObjectName) mbeanServerConnection.getAttribute(serverRuntime, "JMSRuntime");
ObjectName[] jmsServers = (ObjectName[]) mbeanServerConnection.getAttribute(jmsRuntime, "JMSServers");
for (ObjectName jmsServer: jmsServers) {
if (JMS_SERVER.equals(jmsServer.getKeyProperty("Name"))) {
ObjectName[] destinations = (ObjectName[]) mbeanServerConnection.getAttribute(jmsServer, "Destinations");
for (ObjectName destination: destinations) {
if (destination.getKeyProperty("Name").endsWith("!"+JMS_DESTINATION)) {
Object o = mbeanServerConnection.invoke(
destination,
"deleteMessages",
new Object[] {""}, // selector expression
new String[] {"java.lang.String"});
System.out.println("Result: "+o);
break;
}
}
break;
}
}
connector.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
công trình lớn trên một môi trường nút duy nhất, nhưng những gì sẽ xảy ra nếu bạn đang ở trên một môi trường clustered với ONE migratable JMSServer (hiện tại trên nút # 1) và mã này đang thực hiện trên nút # 2. Sau đó sẽ không có JMSServer và không có tin nhắn nào bị xóa.
Đây là vấn đề tôi phải đối mặt ngay bây giờ ...
Có cách nào để kết nối với JMSQueue mà không có JMSServer sẵn?
[sửa]
Tìm thấy một giải pháp: Sử dụng dịch vụ runtime miền thay vì:
ObjectName service = new ObjectName("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean");
và chắc chắn để truy cập quản trị cổng trên WLS-cluster.
Dưới đây là một ví dụ trong WLST cho một máy chủ quản lý chạy trên cổng 7005:
connect('weblogic', 'weblogic', 't3://localhost:7005')
serverRuntime()
cd('/JMSRuntime/ManagedSrv1.jms/JMSServers/MyAppJMSServer/Destinations/MyAppJMSModule!QueueNameToClear')
cmo.deleteMessages('')
Lệnh cuối cùng phải trả lại số tin nhắn đã xóa.
nếu điều này là một trong những thời gian, đơn giản nhất sẽ được để làm điều đó thông qua giao diện điều khiển ...
chương trình trong liên kết dưới đây sẽ giúp bạn xóa chỉ cấp phát các thông điệp từ hàng đợi dựa trên tham số nhắn redelivered
http://techytalks.blogspot.in/2016/02/deletepurge-pending-messages-from-jms.html
Vì đây là câu trả lời đầu tiên của bạn. do đó, tôi không nói bất cứ điều gì, nhưng cố gắng tránh các liên kết bên ngoài và hiển thị một số nỗ lực từ phía bạn. – surajsn
- 1. Cách xóa thư khỏi hàng đợi JMS
- 2. Hàng đợi từ xa JBoss JMS?
- 3. khách hàng cho hàng đợi JMS từ xa
- 4. Hàng đợi JMS đầy đủ
- 5. Đếm số lượng thư trong hàng đợi JMS
- 6. Hàng đợi JMS nhận được tin nhắn?
- 7. Làm thế nào để kết nối JMS từ PHP?
- 8. Thêm Hàng đợi JMS vào Jboss 7
- 9. Làm thế nào để đặt hàng triển khai EJB và cấu hình hàng đợi JMS trong JBoss 5?
- 10. Giả lập hoặc mô phỏng Hàng đợi Tin nhắn (JMS)
- 11. Truy xuất thư từ hàng đợi RabbitMQ
- 12. Làm thế nào để cháy Hàng đợi Laravel với beanstalkd
- 13. RabbitMQ-- chọn lọc truy xuất thư từ hàng đợi
- 14. Làm thế nào để sử dụng java.util.logging trong Weblogic?
- 15. NServiceBus: Cách di chuyển thư từ hàng đợi lỗi
- 16. gửi thư nhanh đến hàng đợi để giao hàng sau
- 17. Làm thế nào để giám sát hàng đợi hiện có từ WebSphere MQ?
- 18. Làm thế nào để làm sạch hàng đợi gửi đi MSMQ
- 19. Làm cách nào để lặp lại hàng đợi âm thanh trong AVQueuePlayer?
- 20. Nhà cung cấp JMS nước ngoài là gì? Vai trò điển hình của Weblogic trong ứng dụng JMS là gì?
- 21. Sử dụng MongoDB làm hàng đợi thư cho Celery
- 22. Điều gì xảy ra trên hàng đợi JMS khi onMessage() ném một JMSException?
- 23. Khởi động lại hàng đợi thư ColdFusion
- 24. Những cạm bẫy tiềm năng trong việc sử dụng hàng đợi JMS?
- 25. Xử lý gián đoạn với Hàng đợi âm thanh
- 26. Tkinter: Đợi mặt hàng trong hàng đợi
- 27. Không thể tạo kết nối JMS từ ứng dụng Java độc lập tới hàng đợi thông báo JBoss AS 7
- 28. Làm cách nào để xử lý thứ tự các thư trong JMS?
- 29. Làm cách nào để kiểm soát tốc độ mà Spring nhận được từ hàng đợi?
- 30. Gợi ý đối với Hàng đợi JMS và các quy ước đặt tên chủ đề
Tôi đã thử điều này nhưng có ngoại lệ này: 'java.lang.UnsupportedOperationException: deleteMessages (String) không hợp lệ cho lớp weblogic.jms.backend.BEDestinationRuntimeMBeanImpl' mặc dù' ls() 'bao gồm' -rx deleteMessages Integer: String (selector) 'trong thông tin nó trả về. – pharsicle
Đã sửa lỗi cho chính tôi! Tình hình của tôi có một chủ đề với các thuê bao bền. Tôi cần cd để MBean cho thuê bao và gọi 'deleteMessages ('')' trên đó. – pharsicle