1.此处是在rabbitmq在本地安装成功的情况下的测试文档,rabbitmq的安装过程此处省略;在rabbitmq安装成功的情况下,rabbitmq的默认访问地址是:http://127.0.0.1:15672/ ;默认用户名:guest,密码:guest;此处注意:在代码中测试的用户不能使用默认账号(即:guest账号),需要你自己新建一个账号进行测试,新建账号方法如下图:图1,新增用户:填写用户名和密码,确认密码;点击图2:新增用户;如图3:my这个用户是新增的用户,注意新增的用户,在没有赋权限前,不能直接使用(黄色:no access);
2.当新建账号没有赋权限直接使用时,测试代会报链接被重置错误: java.net.SocketException: Connection reset,测试代码如下:
public static void main(String[] args) {
//定义连接工厂
ConnectionFactory factory = new ConnectionFactory();
//此处填写mq的链接地址
factory.setHost("172.16.140.*");
//此处填写mq的访问端口(此处为默认端口,注:在浏览中的端口号是:15672,在代码中使用:5672,不能使用:15672)
factory.setPort(5672);
//设置vhost
factory.setVirtualHost("/");
//此处使用的是上面新建的用户名(注:代码中的默认用户guest不能直接使用,需要新建用户)
factory.setUsername("my");
//密码
factory.setPassword("123456");
//获取连接
Connection connection;
try {
connection = factory.newConnection();
//创建通道
Channel channel = connection.createChannel();
//声明创建队列
channel.queueDeclare("QUEUE_NAME2",false,false,false,null);
//消息内容
String message = "Hello World!";
channel.basicPublish("","QUEUE_NAME2",null,message.getBytes());
System.out.println("发送消息:"+message);
//关闭连接和通道
channel.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
错误截图如下:
3.给新建用户赋值权限,如下图:点击下图中的两个按钮
4.新用户赋值成功后的状态是如下图 :
5.设置完成后,运行上面的代码进行简单的测试,上面的代码为mq消息的生产者,将指定信息“Hello World!”,放入mq中。图1,是运行结果;如下图,ready:1,total:1表示数据已经放入;可以看到消息已经在mq中了,点击queues菜单,可以看到“QUEUE_NAME2”(注:此处是在代码中声明的在mq中的唯一标识,在mq中不能重复)。
6.mq的消费者代码如***:mq消息生产者,声明是:"QUEUE_NAME2",消息消费者中的声明必须与之相对应:"QUEUE_NAME2"
public static void main(String[] args) {
//获取连接和通道
Connection connection = null;
try {
//定义连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("172.16.140.*");
factory.setPort(5672);
//设置vhost
factory.setVirtualHost("/");
factory.setUsername("my");
factory.setPassword("123456");
connection = factory.newConnection();
//创建通道
Channel channel = connection.createChannel();
//声明通道
channel.queueDeclare("QUEUE_NAME2",false,false,false,null);
//定义消费者
QueueingConsumer consumer = new QueueingConsumer(channel);
//监听队列
channel.basicConsume("QUEUE_NAME2",true,consumer);
while(true){
//这个方法会阻塞住,直到获取到消息
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
System.out.println("接收到消息:"+message);
}
} catch (Exception e) {
e.printStackTrace();
}
}
7.代码运行结果如下:此信息"Hello World!"是放入mq中的消息内容, 如图:ready:0;total:1;表明消息已经被消费;