RabbitMQ--Hello World(二)
Hello World
生产者
package com.uin;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* @author wanglufei
* @description: 生产者
* @date 2022/1/23/10:52 PM
*/
public class Producer {
//队列
private static final String QUEUE_NAME = "hello";
public static void main(String[] args) {
//引入连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
factory.setUsername("guest");
factory.setPassword("guest");
try {
//获取连接
Connection connection = factory.newConnection();
//在连接中获取信道
Channel channel = connection.createChannel();
/**
** 生成一个队列
* 1.队列名称
* 2.队列里面的消息是否持久化 默认消息存储在内存中
* 3.该队列是否只供一个消费者进行消费 是否进行共享 true 可以多个消费者消费
* 4.是否自动删除 最后一个消费者断开连接以后 该队列是否自动删除 true 自动删除
* 5.其他参数
*/
//Declare 声明一个队列
//queue队列的名字 durable是否持久化 exclusive是否排他 autoDelete是否自动删除 argument给队列传递的参数
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String message = "Hello word";
/**
* 发送一个消息
* 1.发送到那个交换机
* 2.路由的 key 是哪个
* 3.其他的参数信息
* 4.发送消息的消息体
*/
//exchange指定哪个交换机 props
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println("消息发送完毕!");
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
}
消费者
package com.uin;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* @author wanglufei
* @description: TODO
* @date 2022/1/23/11:32 PM
*/
public class Consumer {
private static final String QUEUE_NAME = "hello";
public static void main(String[] args) throws IOException, TimeoutException {
//引入连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("localhost");
connectionFactory.setUsername("guest");
connectionFactory.setPassword("guest");
//获取连接
Connection connection = connectionFactory.newConnection();
//获取连接中的信道
Channel channel = connection.createChannel();
//声明 消息回调的函数式接口 接受消息
//lambdas 函数式 代替了 匿名内部类
//https://cloud.tencent.com/developer/article/1787258
DeliverCallback deliverCallback = (consumerTag, message) -> {
System.out.println(new String(message.getBody()));
};
//声明 取消消息的回调
CancelCallback cancelCallback = (consumerTag) -> {
System.out.println("消费消息被中断");
};
/**
* 消费消息
* 1.消费哪个队列
* 2.消费成功之后是否要自动应答 true代表自动应答 false代表手动应答
* 3.未成功消费的一个回调
* 4.消费者取消消费的回调
*/
channel.basicConsume(QUEUE_NAME, true, deliverCallback, cancelCallback);
}
}
作者:BearBrick0
出处:https://www.cnblogs.com/bearbrick0/p/15837958.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通