安装教程:https://blog.csdn.net/weixin_42673046/article/details/118442323
启动等命令
进入到rabbitmq文件目录下sbin文件夹下面执行命令
后台启动: ./rabbitmq-server -detached
查看状态:./rabbitmqctl status
应用和节点都将被关闭:./rabbitmqctl stop
应用启动:./rabbitmqctl start_app
应用关闭节点不关:./rabbitmqctl stop_app
开启管理插件web页面:./rabbitmq-plugins enable rabbitmq_management
查看插件列表状态:./rabbitmq-plugins list
springboot整合rabbitMQ的demo项目放在本地盘中
一 ,rabbitmq中消息的几种模型
第一种:直连
生产者(P) —> 队列 —> 消费者(C)
生产者连接队列发布消息方法
public static void clientRb() throws IOException, TimeoutException {
//rabbitMQ连接步骤
ConnectionFactory connectionFactory = new ConnectionFactory();
//参数设置
connectionFactory.setHost("127.0.0.1");
connectionFactory.setPort(5672);
//要连接的虚拟主机
connectionFactory.setVirtualHost("/dmo");
connectionFactory.setUsername("admin");
connectionFactory.setPassword("admin");
//创建连接对象
Connection connection = connectionFactory.newConnection();
//获取中间通道
//需要通过中间通道将消息发送到队列
Channel channel = connection.createChannel();
//设置消息连接信息 给通道绑定队列
//参数意思:1.队列名称(主机中没有会自动创建)
//2.是否开启持久化(保存队列信息) 此处只是队列持久化,消息不会持久化保存 不开启每次重启rabbitmq会删掉之前的队列
//3.是否独占队列(只允许当前客户端向队列发送消息)
//4.是否在消息消费完成后自动删除当前队列(消费者消费完并且断开连接才会删除)
//5.附加参数
channel.queueDeclare("helloRb",false,false,false,null);
//直连模式中其实不绑定队列也可以直接发布消息,因为下面发布消息的方法中参数路由key对应着队列名称
//直连模式下消息直接发布到AMQP default默认交换机中,默认交换机与所有队列建立隐含绑定关系,路由的key就是队列名
//所以在发布方法中直接写上队列名称也可以直接发送到队列中
//发布消息
//参数意思:1.交换机名称 2.路由key:因为默认交换机绑定了所有队列,在直连模式中可以直接送到队列中 3.发布消息的额外设置 4.发布消息集体内容
//MessageProperties.PERSISTENT_TEXT_PLAIN --开启消息持久化
channel.basicPublish("", "helloRb", MessageProperties.PERSISTENT_TEXT_PLAIN, "hello rabbitMQ3".getBytes());
channel.close();
connection.close();
}
消费者方法
//在main函数中运行,因为方法调用时运行结束会直接杀死线程
public static void main(String[] args) throws IOException, TimeoutException {
//rabbitMQ连接步骤
//前面的连接步骤 都一样
//参数设置
RabbitMQConnectionUtil rabbitMQConnectionUtil = new RabbitMQConnectionUtil();
Connection connection = rabbitMQConnectionUtil.getConnection();
Channel channel = connection.createChannel();
//这里的参数要与队列一致 否则会报错
//例如生产者新建的是一个消息开启持久化的队列,消费者这里绑定也要设置成持久化才能接收,否则报错
channel.queueDeclare("helloRb", true, false, false, null);
//获取/消费消息
//参数意思: 1.消息队列名称
//2.是否自动确认(此处为true) 只有确认了的消息才认为被消费完成了
//3.消费回调可以在其中获取到消息内容等操作
channel.basicConsume("helloRb", true, new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
//super.handleDelivery(consumerTag, envelope, properties, body);
System.out