作用程序员的玩具:兔子没钱。——暮雪绵豆沙
- 流量削峰。保护服务
- 逻辑解耦。中间件
- 优雅异步。
- ActiveMQ:老牌。
- Kafka:为大数据而生。
- RocketMQ:双十一的考验。
- RabbitMQ:简单,开发语言冷门。
- 生产者:产生消息
- 交换机:路由分发
- 队列:消息队列
- 消费者:消费消息
- 通道:管理连接
工作模式
- 简单模式
- 分配工作任务
- 发布订阅
- 路由
- 主题
- RPC
- 发布确认
官网下载
配置环境变量ERLANG_HOME
指向根目录,比如说:E:programserl-24.2
官网下载
配置切换到sbin目录
启用Web插件
./rabbitmq-plugins.bat enable rabbitmq_management
打开后台服务,建议设成bat脚本
./rabbitmq-server.bat -detached
网页地址
http://localhost:15672/#/
初始账户
guest / guest
pom.xml
工具类com.rabbitmq amqp-client 5.14.0 commons-io commons-io 2.6
用于获取通道
public class RabbitUtil {
public static Channel getConn() throws Exception {
ConnectionFactory cf = new ConnectionFactory();
cf.setHost("localhost");
cf.setUsername("guest");
cf.setPassword("guest");
return cf.newConnection().createChannel();
}
}
生产者
发送10条简单消息
public class Producer {
public static void main(String[] args) throws Exception {
//获取连接
Channel channel = RabbitUtil.getConn();
channel.queueDeclare("q", false, false, false, null);
for (int i = 1; i <= 10; i++) {
channel.basicPublish("", "q", null, (i + "").getBytes());
}
//关闭连接
channel.getConnection().close();
}
}
运行
成功!
用于消费消息
public class Consumer {
public static void main(String[] args) throws Exception {
//获取连接
Channel channel = RabbitUtil.getConn();
//声明回调
DeliverCallback deliver = (consumerTag, message) -> {
System.out.println("接收了" + new String(message.getBody()));
};
//取消回调
CancelCallback cancel = consumerTag -> {
System.out.println("取消了");
};
channel.basicConsume("q", true, deliver, cancel);
}
}
运行
成功!



