RabbitMQ (一) springboot+rabbitmq配置与简单队列


rabbitmq消息中间件,按我的理解就是解决同时大量请求造成服务器压力大挂掉,可以作为中间商存储请求,再慢慢让服务器返回。

首先是配置环境,默认已经安装了本地rabbitmq,可以通过localhost:15672 进入管理页面

pom.xml

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

导入依赖后,在RabbitMq Manager页面按照下面步骤设置好登录用户,host和权限,

然后你就可以在ide中写测试代码了。

首先写个连接工具类:

package com.yaimer.d.rabbit;


import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.impl.AMQConnection;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @program: SpringSecurityTestProject
 * @description:
 * @author: yaimer
 * @create: 2020-09-07 23:56
 **/

public class test {

    /**
     * 获取MQ的连接
     */
    public static Connection getConnection() throws IOException, TimeoutException {
        //定义一个连接工厂
        ConnectionFactory factory = new ConnectionFactory();

        //设置服务地址
        factory.setHost("127.0.0.1");

        //设置端口 AMQ  5672
        factory.setPort(5672);

        //vhost
        factory.setVirtualHost("/vhost");

        //用户名
        factory.setUsername("zard");

        //密码
        factory.setPassword("admin");

        return  factory.newConnection();
    }
}

简单队列就是一个生产者Producer和一个消费者Consumer

写一个生产者:

package com.yaimer.d.rabbit;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @program: SpringSecurityTestProject
 * @description:
 * @author: yaimer
 * @create: 2020-09-08 00:19
 **/

public class produce {
    private static final String QUEUE_NAME="testQueue";

    public static void main(String[] args) throws IOException, TimeoutException {

        Connection connection = test.getConnection();

        //从连接中获取一个通道
        Channel channel = connection.createChannel();

        //创建队列声明
        channel.queueDeclare(QUEUE_NAME,false,false,false,null);

        String str ="hello_zard_test______";

        channel.basicPublish("",QUEUE_NAME,null,str.getBytes());

        System.out.println("她走过——————"+str);

        channel.close();

        connection.close();
    }
}

,接着一个消费者:

package com.yaimer.d.rabbit;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @program: SpringSecurityTestProject
 * @description:
 * @author: yaimer
 * @create: 2020-09-08 00:29
 **/

public class consumer {
    private static final String QUEUE_NAME="testQueue";

    public static void main(String[] args) throws IOException, TimeoutException {
        Connection connection = test.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, AMQP.BasicProperties properties, byte[] body) throws IOException {
                String str = new String(body,"utf-8");

                System.out.println("consumer____"+str);
            }
        };

        channel.basicConsume(QUEUE_NAME,true,consumer);


    }
}

写完就可以运行了,可以先运行消费者,再运行生产者,运行几次,消费者接受几次。

也可不运行消费者,运行几次生产者,最后运行消费者,会一次性接收。

 

这是简单队列的实现。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM