最近摸了一波大鱼,所以我又跑回来更新文章了

0.前言

最近搭建了RabbitMQ的服务器,所以通过文章来记录一下自己的搭建过程。

RabbitMQ 是实现AMQP(高级消息队列协议)的开源消息中间件,其拥有许多非常不错的特点。

一、Erlang环境的搭建

01. 下载软件包

Github下载可能会有点慢,可以去别的地方找一下对应的安装包

wget -c https://github.com/rabbitmq/erlang-rpm/releases/download/v23.3.4.11/erlang-23.3.4.11-1.el7.x86_64.rpm

注:文件名的.el后面的对应的就是centos几,如.el7就是centos7

02.安装erlang

rpm -ivh erlang-23.3.4.11-1.el7.x86_64.rpm

二、下载RabbitMQ

01.下载软件包

wget -c https://download.fastgit.org/rabbitmq/rabbitmq-server/releases/download/v3.9.13/rabbitmq-server-3.9.13-1.el7.noarch.rpm

02.安装软件包

yum install rabbitmq-server-3.9.13-1.el7.noarch.rpm

03.启动并查看状态

service rabbitmq-server start
service rabbitmq-server status

04.开启RabbitMQ的Web管理系统

rabbitmq-plugins enable rabbitmq_management

05.设置用户名密码

添加用户:rabbitmqctl add_user admin admin
添加权限:rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
修改角色:rabbitmqctl set_user_tags admin administrator

设置完以后输入账号:admin,密码:admin登录进入管理界面

三、实例程序开发

01.添加RabbitMQ依赖

新建项目,打开pom.xml,在依赖中添加:

    
      com.rabbitmq
      amqp-client
      4.1.0
    

02.编写生产者部分代码

新建一个MQSender.java类,具体实现代码如下:

package xyz.feiyueha.rabbithelloworld;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.util.Scanner;

public class MQSender {
    private final static String QUEUE_NAME = "helloMQ";//定义队列名字

    public static void main(String[] args){
        try {
            //建立连接和通道
            ConnectionFactory factory = new ConnectionFactory();
            factory.setHost("192.168.241.128");//这里改成你的服务器的地址
            factory.setUsername("admin");//设置用户名密码
            factory.setPassword("admin");
            Connection connection = factory.newConnection();
            Channel channel = connection.createChannel();

            //为通道指明队列
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            String message = "Hello World!\nHello RabbitMQ!";

            //发布消息
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
            System.out.println("Message sent:{" + message + "}");

            System.out.println("Please input your message you want to sent:");
            String input = new Scanner(System.in).nextLine();
            channel.basicPublish("", QUEUE_NAME, null, input.getBytes("UTF-8"));
            System.out.println("Message sent:{" + input + "}");

            //关闭连接
            channel.close();
            connection.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

03.编写消费者部分代码

新建一个MQConsumer.java类,具体实现代码如下:

package xyz.feiyueha.rabbithelloworld;

import com.rabbitmq.client.*;

import java.io.IOException;

public class MQConsumer {
    private final static String QUEUE_NAME = "helloMQ";//定义队列名字

    public static void main(String[] args){
        try {
            //建立连接和通道
            ConnectionFactory factory = new ConnectionFactory();
            factory.setHost("192.168.241.128");//这里改成你的服务器的地址
            factory.setUsername("admin");//设置用户名密码
            factory.setPassword("admin");
            Connection connection = factory.newConnection();
            Channel channel = connection.createChannel();

            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            System.out.println("Start to wait message...");

            Consumer consumer = new DefaultConsumer(channel) {//利用匿名内部类创建简单的消费者处理方法
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
                        throws IOException {
                    String message = new String(body, "UTF-8");
                    System.out.println("Received message:{" + message + "}");
                }
            };
            channel.basicConsume(QUEUE_NAME, true, consumer);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

04.运行并测试编写的代码

效果图如下:

成功发送并接收消息。