zoukankan      html  css  js  c++  java
  • RabbitMQ日常(一)HelloWorld之模拟收发消息

    RabbitMQ日常(一)HelloWorld之模拟收发消息

    2019-08-29 17:01:13 wujianqinjian 阅读数 19更多

    分类专栏: 消息队列

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    本文链接:https://blog.csdn.net/u010569419/article/details/100076066

    下图为一个简易的RabbitMQ流程草图,RabbitMQ一般流程为:

    1. 由生产者创建消息后,放置在(交换机)exchange
    2. RabbitMQ通过相关配置绑定exchangequeue(队列)
    3. 消费者通过channel(管道)获取channel中的消息
      在这里插入图片描述

    实验环境:

    1. rabbitmq 3.7.14(使用rpm安装)

    主要步骤为:

    1. 创建一个Springboot项目,小白请自行百度
    2. 通过maven的pom文件引入相关依赖jar包
    3. 编写生产端、消费端代码
    • pom.xml文件
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.7.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.rabbitMQ</groupId>
        <artifactId>mq_demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>mq_demo</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>com.rabbitmq</groupId>
                <artifactId>amqp-client</artifactId>
                <version>5.6.0</version>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>
    
    

    生产者代码

    package com.new_rabbitmq;
    import com.rabbitmq.client.Channel;
    import com.rabbitmq.client.Connection;
    import com.rabbitmq.client.ConnectionFactory;
    
    public class Produce {
    
        public static void main(String[] args) throws Exception{
            ConnectionFactory connectionFactory= new ConnectionFactory();
            connectionFactory.setHost("你的主机IP");
            connectionFactory.setPort(5672);
            connectionFactory.setVirtualHost("/");
    
            Connection connection=connectionFactory.newConnection();
    
            Channel channel=connection.createChannel();
            String msg="This is a message2!";
            //这里的test01为队列名称
            channel.basicPublish("","test01",null,msg.getBytes());
            channel.close();
            connection.close();
    
        }
    }
    
    

    消费者代码

    package com.new_rabbitmq;
    
    import com.rabbitmq.client.*;
    import com.rabbitmq.client.impl.AMQImpl;
    
    import java.io.IOException;
    
    public class Consumer {
    
        public static void main(String[] args) throws Exception{
            //创建链接
            ConnectionFactory connectionFactory= new ConnectionFactory();
            connectionFactory.setHost("你的主机IP");
            connectionFactory.setPort(5672);
            connectionFactory.setVirtualHost("/");
            Connection connection=connectionFactory.newConnection();
            //创建一个管道
            Channel channel=connection.createChannel();
            // 声明一个队列
            channel.queueDeclare("test01",true,false,false,null);
            // 创建消费者
            DefaultConsumer consumer= new DefaultConsumer(channel){
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    //super.handleDelivery(consumerTag, envelope, properties, body);
                    String message = new String(body, "utf-8");
                    System.out.println("[Receive]:" + message);
                }
            };
            channel.basicConsume("test01",true,consumer);
    	/*
    	//创建消费者的第二种方式
            DeliverCallback deliverCallback = (consumer, delivery) -> {
                String message = new String(delivery.getBody(), "UTF-8");
                System.out.println(" [x] Received '" + message + "'");
            };
            channel.basicConsume(queueName, true, deliverCallback, consumer -> { });
        */
        }
    }
    
    

    总结:

    1. 上面总结了两种创建consumer的方法(虽然是官网抄的),但重点是 channel.basicConsume(“test01”,true,consumer); 这里的true是代表自动签收(生产一般不用自动签收)。
    2. 根据rabbitMQ的原理:我们这里需要先启动消费者端,再启动生产端,才可以看到消费者监听队列的效果!
  • 相关阅读:
    108. Convert Sorted Array to Binary Search Tree
    107. Binary Tree Level Order Traversal II
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    104. Maximum Depth of Binary Tree
    103. Binary Tree Zigzag Level Order Traversal
    102. Binary Tree Level Order Traversal
    系统和进程相关信息
    文件I/0缓冲
    系统编程概念(文件系统mount等函数的使用)
  • 原文地址:https://www.cnblogs.com/grj001/p/12223583.html
Copyright © 2011-2022 走看看