centos7上使用消息中间件RabbitMQ

1.安装和配置

安装RabbitMQ之前需要erlang运行环境,需要注意erlang和RabbitMQ的版本对应关系,具体可以参考RabbitMQ官网的版本对照说明:https://www.rabbitmq.com/which-erlang.html,本文安装的erlang版本是19.3.x, RabbitMQ版本是3.6.8
安装步骤:

使用yum安装erlang

yum install erlang

安装完成后可以检测是否安装成功,使用如下命令:

erl

安装成功会输出版本信息

Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V5.10.4  (abort with ^G)

然后就可以安装RabbitMQ了
首先下载一个RabbitMQ,可以在本地下载上传到服务器,也可以直接下载,命令如下:

wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.8/rabbitmq-server-3.6.8-1.el7.noarch.rpm

然后使用如下命令:

rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
yum install rabbitmq-server-3.6.8-1.el7.noarch.rpm
rpm -i --nodeps rabbitmq-server-3.6.8-1.el7.noarch.rpm

启动RabbitMQ

/sbin/service rabbitmq-server start

创建用户admin

rabbitmqctl add_user admin admin

给用户admin授权

rabbitmqctl  set_permissions -p "/" admin '.*' '.*' '.*'

给用户admin赋予administrator角色

rabbitmqctl set_user_tags admin administrator 

开启RabbitMQ控制台

rabbitmq-plugins enable rabbitmq_management

然后可以远程访问http://服务器外网ip:15672方法RabbitMQ控制台

2.用最原生的方式连接RabbitMQ测试简单的生产者和消费者

pom 依赖

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-amqp</artifactId>
                <version>2.1.6.RELEASE</version>
            </dependency>

连接测试代码

package cn.ckh2019.test;

import cn.ckh2019.pawnshop.service.cms.PawnshopServiceCmsApplication;
import com.rabbitmq.client.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

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

/**
 * @author Chen Kaihong
 * 2019-10-31 15:02
 */
public class RabbitMQTest {

    static final String QUEUE = "queue-01";
    /**
     * Producer
     */
    @Test
    public void  test1() {
        ConnectionFactory factory = new ConnectionFactory();
        //设置连接信息
        factory.setHost("129.211.17.8");
        factory.setPort(5672);
        factory.setUsername("admin");
        factory.setPassword("admin");
        factory.setVirtualHost("/");
        Connection connection = null;
        Channel channel = null;
        try {
            System.out.println(123);
            connection = factory.newConnection();
            System.out.println(456);
            channel = connection.createChannel();
            /**
             * queue: 队列名称, 没有则创建
             * durable: 是否持久化
             * exclusive: 是否都占连接
             * autoDelete: 自动删除
             * arguments: 参数
             */
            channel.queueDeclare(QUEUE, true, false, false, null);

            /**
             * exchange: 交换机,
             * routingKey: 路由key,交换机根据路由key将消息转发到指定的队列,如果使用默认交换机,routingKey设置为队列的名称
             * props: 消息的属性
             * body: 消息内容
             */
            channel.basicPublish("",QUEUE,null,"ckh".getBytes());
            System.out.println("发送完成");
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            try {
                channel.close();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (TimeoutException e) {
                e.printStackTrace();
            }

            try {
                connection.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

    /**
     * Consumer
     */
    @Test
    public void test2() {

        ConnectionFactory factory = new ConnectionFactory();
        //设置连接信息
        factory.setHost("129.211.17.8");
        factory.setPort(5672);
        factory.setUsername("admin");
        factory.setPassword("admin");
        factory.setVirtualHost("/");
        Connection connection = null;
        try {
            connection = factory.newConnection();
            Channel channel = connection.createChannel();
            channel.queueDeclare(QUEUE, true, false, false, null);

            /**
             * 监听队列
             * queue: 队列名称
             * autoAsk: 自动回复
             * callback: 消费方法
             */
            channel.basicConsume(QUEUE,true, new DefaultConsumer(channel){
                /**
                 *
                 * @param consumerTag   消费者标签
                 * @param envelope 信封
                 * @param properties 消息的属性
                 * @param body  消息内容
                 * @throws IOException
                 */
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    String exchange = envelope.getExchange();
                    //消息id, mq在channel 中用来标识消息的id
                    long deliveryTag = envelope.getDeliveryTag();
                    String msg = new String(body,"utf-8");
                    System.out.println("msg =======> " + msg);
                }
            });
        } catch (Exception e){
        } finally {
        }

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值