2012-07-12 34 views
9

Tôi đang sử dụng phiên bản Spring amqp 1.1 làm ứng dụng khách java của mình. Tôi có một hàng đợi có khoảng 2000 tin nhắn. Tôi muốn có một dịch vụ kiểm tra kích thước hàng đợi này và nếu nó trống thì nó sẽ gửi một thông báo cho biết "Tất cả các mục được xử lý".Kích thước hàng đợi trong Spring AMQP Java client

Tôi không biết cách nhận kích thước hàng đợi hiện tại? Vui lòng giúp

Tôi đã tìm kiếm và tìm thấy một lớp "RabbitBrokerAdmin" đã có trong phiên bản trước 1.0. Tôi nghĩ rằng nó không có trong 1.1 bây giờ.

Bất kỳ con trỏ nào trong việc nhận kích thước hàng đợi hiện tại?

Trả lời

14

Vì vậy, tôi biết đây là một chút muộn và một giải pháp đã được tìm thấy nhưng đây là một cách khác để tìm kiếm nhắn đếm trong hàng đợi của bạn

giải pháp này giả định rằng bạn đang sử dụng khuôn khổ mùa xuân RabbitMQ và đã xác định hàng đợi của bạn trong cấu hình ứng dụng của bạn với các thẻ sau định nghĩa

<rabbit:queue> 
<rabbit:admin> 

Lớp java:

public class QueueStatsProcessor { 
    @Autowired 
    private RabbitAdmin admin; 
    @Autowired 
    private List<Queue> rabbitQueues; 

    public void getCounts(){ 
     Properties props; 
     Integer messageCount; 
     for(Queue queue : rabbitQueues){ 
      props = admin.getQueueProperties(queue.getName()); 
      messageCount = Integer.parseInt(props.get("QUEUE_MESSAGE_COUNT").toString()); 
      System.out.println(queue.getName() + " has " + messageCount + " messages"); 
     } 
    } 
} 

Bạn cũng có thể sử dụng giải pháp này để đọc những người tiêu dùng hiện nay gắn liền với hàng đợi http://docs.spring.io/spring-amqp/docs/1.2.1.RELEASE/api/org/springframework/amqp/rabbit/core/RabbitAdmin.html#getQueueProperties(java.lang.String)

+0

Thank, tôi sẽ cố gắng đó là tốt. – hellojava

+0

hoạt động như một sự quyến rũ, cảm ơn bạn! – Zarathustra

+0

Đây là câu trả lời tốt hơn nhiều. Ít khó khăn hơn. –

10

Bạn có thể sử dụng các ví dụ RabbitAdmin để có được những thông tin chi tiết từ hàng đợi, như sau:

@Resource RabbitAdmin admin; 
... 
protected int getQueueCount(final String name) { 
    DeclareOk declareOk = admin.getRabbitTemplate().execute(new ChannelCallback<DeclareOk>() { 
     public DeclareOk doInRabbit(Channel channel) throws Exception { 
      return channel.queueDeclarePassive(name); 
     } 
    }); 
    return declareOk.getMessageCount(); 
} 
Các vấn đề liên quan