• RabbitMQ学习第一记:用java连接RabbitMQ


    1、什么是RabbitMQ

      MQ(Message Queue):消息队列,是服务端设计的一个可以存储大量消息的队列,并提供客户端操作队列的方法:生产队列(向队列中添加数据)、消费队列(从队列中取数据)。RabbitMQ就是基于消息队列的一个典型应用。RabbitMQ除了普通的生产消费功能,还有一些高级功能:公平分发 ,轮询分发,路由模式,通配符模式,发布订阅,队列持久化。

    2、java实现RabbitMQ的连接

    2.1、RabbitMQ客户端jar包

    <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
        <version>4.0.2</version>
    </dependency>

    2.2、java连接RabbitMQ工具类

    public class ConnectionUtil
    {
        private static Logger logger = Logger.getLogger(ConnectionUtil.class);
        
        public static Connection getConnection()
        {
            try
            {
                Connection connection = null;
                //定义一个连接工厂
                ConnectionFactory factory = new ConnectionFactory();
                //设置服务端地址(域名地址/ip)
                factory.setHost("127.0.0.1");
                //设置服务器端口号
                factory.setPort(5672);
                //设置虚拟主机(相当于数据库中的库)
                factory.setVirtualHost("/");
                //设置用户名
                factory.setUsername("admin");
                //设置密码
                factory.setPassword("888888");
                connection = factory.newConnection();
                return connection;
            }
            catch (Exception e)
            {
                return null;
            }
        }
    }

    2.3、简单的生产者-消费者模式

      下图取自于官方网站(RabbitMQ)的生产消费模式的工作图

    P:消息的生产者

    C:消息的消费者

    红色:队列 

    生产者将消息发送到队列,消费者从队列中获取消息。

    2.4、生产者(Send)

    public class Send
    {
        //队列名称
        private static final String QUEUE_NAME = "test_simple_queue";
        
        public static void main(String[] args)
        {
            try
            {
                //获取连接
                Connection connection = ConnectionUtil.getConnection();
                //从连接中获取一个通道
                Channel channel = connection.createChannel();
                //声明队列
                channel.queueDeclare(QUEUE_NAME, false, false, false, null);
                String message = "This is simple queue";
                //发送消息
                channel.basicPublish("", QUEUE_NAME, null, message.getBytes("utf-8"));
                System.out.println("[send]:" + message);
                channel.close();
                connection.close();
            }
            catch (IOException | TimeoutException e)
            {
                e.printStackTrace();
            }
        }
    }

    运行结果:
    [send]:This is simple queue

    2.5、消费者(Receive)

    public class Receive
    {
        //队列名称
        private static final String QUEUE_NAME = "test_simple_queue";
        
        public static void main(String[] args)
        {
            try
            {
                //获取连接
                Connection connection = ConnectionUtil.getConnection();
                //从连接中获取一个通道
                Channel channel = connection.createChannel();
                //声明队列
                channel.queueDeclare(QUEUE_NAME, false, false, false, null);
                //定义消费者
                DefaultConsumer consumer = new DefaultConsumer(channel)
                {
                    //当消息到达时执行回调方法
                    @Override
                    public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties,
                            byte[] body) throws IOException
                    {
                        String message = new String(body, "utf-8");
                        System.out.println("[Receive]:" + message);
                    }
                };
                //监听队列
                channel.basicConsume(QUEUE_NAME, true, consumer);
            }
            catch (IOException | ShutdownSignalException | ConsumerCancelledException e)
            {
                e.printStackTrace();
            }
        }
    }
    
    运行结果:
    [Receive]:This is simple queue

    总结:简单的生产者-消费者模式实现了生产者向队列里生产数据,消费者启动后可以一直监听队列,不断的从队列里取出数据。

    注意:本文仅代表个人理解和看法哟!和本人所在公司和团体无任何关系!

  • 相关阅读:
    chart制作流程
    grep通过下面參数控制上下文
    PV、PVC、StorageClass讲解
    CentOS 7 安装NFS
    查看K8S的kubectl命令行缩写
    rpm&yum使用
    查看证书有效期
    kubectl-debug
    Docker镜像空间清理
    Matlab画图,坐标轴范围设置和间隔设置
  • 原文地址:https://www.cnblogs.com/wy697495/p/9611310.html
Copyright © 2020-2023  润新知