Java通过RabbitMq API获取指定队列的消息列表

目前项目上使用的消息中间件是RabbitMq,期间有一个次需要切换Mq,可是此时原来Mq服务中有一部分未消费的消息,所以需要将原来未消费的消息读取出来发送到新的Mq服务中,再加上日常系统运行后台也需要查看一些未消费的消息,所以就在后台做了一个Mq消息管理的一个页面,将为消费的消息展示出来,也可以在后台发送消息到Mq中,具体如下:

1、项目中添加一下代码

<dependency>
    <groupId>commons-codec</groupId>
	<artifactId>commons-codec</artifactId>
	<version>1.12</version>
</dependency>
		
<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>http-client</artifactId>
    <version>3.1.1.RELEASE</version>
</dependency>

2、打开com.rabbitmq.http.client包下的 Client类

3、重新创建一个具体实现读取消息的类,此处我创建的是QueryMsgFromMq

4、将第二步打开的Client的类的代码拷贝到你创建的QueryMsgFromMq类中,将构造方法名称改为你新创建的类名称,如下代码:

// 修改前
public Client(String url, String username, String password) throws MalformedURLException, URISyntaxException {
    this(new URL(url), username, password);
}

// 修改后
public QueryMsgFromMq(String url, String username, String password) throws MalformedURLException, URISyntaxException {
		    this(new URL(url), username, password);
}

注意:我在此处只是放了一个构造方法的实例,在具体实现时需要将所有的构造方法名称替换成你新创建的类名称

5、在新创建的类中添加如下代码

	public void queryMessageFromMq(String vhost, String queuename, String count) throws URISyntaxException, IOException, ClassNotFoundException {
		Map<String, String> body = new HashMap<String, String>();
	    body.put("ackmode","ack_requeue_true");
	    body.put("count",count);
	    body.put("encoding","auto");
	    body.put("ackmode","ack_requeue_true");
	    final URI uri = uriWithPath("http://192.168.145.55:15672/api/queues/" + encodePathSegment(vhost) + "/" + encodePathSegment(queuename) + "/get");
	    ResponseEntity<List> result= rt.postForEntity(uri, body, List.class);
	    System.out.println("result============" + result.getBody().size());
	    List list = result.getBody();
	    for (Object entry : list) {
	        if (entry instanceof Map) {
//	        	System.out.println("entry-------------"+ entry);
	        	System.out.println(((Map) entry).get("payload"));
	        }
	    }
	}

public static void main(String[] args) throws ClassNotFoundException, URISyntaxException, IOException {
		// http://guest:guest@192.168.145.55:15672/api/
		// guest:guest 标识RabbitMq后台登录的用户名和密码
		QueryMsgFromMq test = new QueryMsgFromMq("http://guest:guest@192.168.145.55:15672/api/");
		String vhost = "ch-dev";
		String queuename = "queue_test";
		test.queryMessageFromMq(vhost,queuename,"10");
	}

以上便可读取Mq中的消息,结果如下

如果大家有好的方法也可以沟通交流...

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZQGBack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值