您的位置:首页 > 编程语言 > Java开发

Spring Boot中通过RabbitTemplate主动pull(get)消息的例子

2018-02-09 10:44 1966 查看
import java.io.IOException;
import java.util.Properties;

import javax.annotation.PostConstruct;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.rabbit.core.ChannelCallback;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class RabbitAdminService {

private static final Logger LOGGER = LoggerFactory.getLogger(RabbitAdminService.class);

@Autowired
AmqpAdmin rabbitAdmin;
@Autowired
RabbitTemplate rabbitTemplate;

public int getCount(String queueName) {
Properties properties = rabbitAdmin.getQueueProperties(queueName);
return (Integer)properties.get(RabbitAdmin.QUEUE_MESSAGE_COUNT);
}

@PostConstruct
public void init(){
new Thread( new Runnable(){
@Override
public void run(){
while(true){
try{
Thread.sleep(1000);
processQueue(MQConstants.INDUSTRYSMS_QUEUE);
}catch(Exception e){

}
}

}
}).start();
}
public static class ChannelCallbackImpl implements ChannelCallback<Message>{
private String queueName;
public ChannelCallbackImpl(String queueName){
this.queueName = queueName;
}
@Override
public Message doInRabbit(Channel channel) {
GetResponse response = null;
try {
response = channel.basicGet(queueName, false);
 Message message = Message.parseFrom(response.getBody());

if(message != null){
int mobiles = message.getMessageTosList().size();
LOGGER.info("号码:{}", mobiles);
}
channel.basicAck(response.getEnvelope().getDeliveryTag(), false);
return message;
}
catch(Exception e) {
try {
channel.basicNack(response.getEnvelope().getDeliveryTag(), false, true);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
return null;
}
}
public  void processQueue(String queueName) {
rabbitTemplate.execute(new ChannelCallbackImpl(queueName));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: