1.生产者代码:
package com.atguigu.rabitmq.one;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class Producer {
private final static String QUEUE_NAME = "hello";
public static void main(String[] args) throws Exception {
//创建一个连接工厂
ConnectionFactory factory=new ConnectionFactory();
//工厂ip连接Rabbitmq的队列
factory.setHost("192.168.1.189");
//用户名
factory.setUsername("root");
factory.setPassword("123");
//创建链接
Connection connection = factory.newConnection();
//获取信道
Channel channel = connection.createChannel();
//创建一个队列
// /**
// * 生成一个队列
// * 1.队列名称
// * 2.队列里面的消息是否持久化 默认消息存储在内存中
// * 3.该队列是否只供一个消费者进行消费 是否进行共享 true 可以多个消费者消费
// * 4.是否自动删除 最后一个消费者端开连接以后 该队列是否自动删除 true 自动删除
// * 5.其他参数
// */
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
String message="hello world";
System.out.println("消息正在发送");
channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
System.out.println("消息已发送");
//channel 实现了自动 close 接口 自动关闭 不需要显示关闭
}
}
2.消费者代码:
package com.atguigu.rabitmq.one;
import com.rabbitmq.client.*;
public class Consumer {
//队列名称
public static final String QUEUE_NAME="hello";
//接收消息
public static void main(String[] args) throws Exception{
//创建连接工厂
ConnectionFactory factory=new ConnectionFactory();
//工厂ip连接Rabbitmq的队列
factory.setHost("192.168.1.189");
//用户名
factory.setUsername("root");
factory.setPassword("123");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
//声明,接受消息回调
DeliverCallback deliverCallback=(consumerTag,message)->{
System.out.println(new String(message.getBody()));
};
//声明,取消消息回调
CancelCallback cancelCallback=consumerTag->{
System.out.println("消息消费中断");
};
//接收消息
channel.basicConsume(QUEUE_NAME,true,deliverCallback,cancelCallback);
}
}
3.过程&结果
首先运行生产者,结果:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
消息正在发送
消息已发送
运行消费者后,需要再次运行生产者,显示结果:
hello world
4.踩坑1,
RabbitMQ需要配置两个安全规则,一个管理工具的端口15672,一个5672。
打开15672端口:
[root@node04 network-scripts]# firewall-cmd --add-port=15672/tcp --permanent
打开5672端口:
[root@node04 network-scripts]# firewall-cmd --zone=public --add-port=5672/tcp --permanent
success
[root@node04 network-scripts]# firewall-cmd --reload
success
[root@node04 network-scripts]# firewall-cmd --list-ports
15672/tcp 5672/tcp
5.踩坑2
点进账号里面,把Virtua lHost为【/】的set permission给用户,然后再重新启动项目,
项目是springboot结构,win10下安装RabbitMQ,自己配置的一个虚拟主机和用户账号,在RabbitMQ管理界面上有把虚拟主机分配给用户,但是没有把系统默认的Virtua lHost为【/】分配给用户造成的,所以解决办法把Virtua lHost为【/】分配给用户就可解决。
参考:
原博主解答
版权声明:本文为weixin_43899452原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。