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中的消息,结果如下

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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Java中调用RabbitMQ API,你可以使用RabbitMQ Java客户端库。下面是一个简单的示例代码: 首先,确保你已经在你的项目中添加了RabbitMQ Java客户端库的依赖项。你可以在Maven或Gradle中添加以下依赖: Maven: ```xml <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.11.0</version> </dependency> ``` Gradle: ```groovy implementation 'com.rabbitmq:amqp-client:5.11.0' ``` 接下来,你可以使用以下代码创建一个RabbitMQ连接,并发送消息到一个队列: ```java import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import java.io.IOException; import java.util.concurrent.TimeoutException; public class RabbitMQExample { private final static String QUEUE_NAME = "my_queue"; private final static String MESSAGE = "Hello, RabbitMQ!"; public static void main(String[] args) { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); // RabbitMQ服务器的主机名或IP地址 try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) { channel.queueDeclare(QUEUE_NAME, false, false, false, null); channel.basicPublish("", QUEUE_NAME, null, MESSAGE.getBytes()); System.out.println("Sent message: " + MESSAGE); } catch (IOException | TimeoutException e) { e.printStackTrace(); } } } ``` 上面的代码中,我们创建了一个名为 "my_queue" 的队列,并发送了一个消息 "Hello, RabbitMQ!" 到该队列。 请注意,上面的代码只是一个简单的示例,你可以根据你的需求进行更详细的配置和处理。你可以查阅RabbitMQ Java客户端库的文档,了解更多关于连接、通道、队列等操作的详细信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ZQGBack

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

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

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

打赏作者

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

抵扣说明:

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

余额充值