栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

RabbitMQ生产者和消费者helloworld&踩坑指北

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

RabbitMQ生产者和消费者helloworld&踩坑指北

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();
        //创建一个队列
        // 
        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为【/】分配给用户就可解决。
参考:
原博主解答

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/785779.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号