RabbitMQ 的介绍及使用

消息队列是一种用于在应用程序之间传递消息的通信机制。它通常用于解耦生产者和消费者之间的关系,使得它们可以异步地交换数据,从而提高系统的可伸缩性、可靠性和性能。常见的消息队列系统包括 RabbitMQ、Apache Kafka、Amazon SQS(Simple Queue Service)等。

安装消息队列

下载地址: https://www.rabbitmq.com/download.html 

1、安装Erlang环境 

sudo apt install erlang

 2、接着安装RabbitMQ

sudo apt install rabbitmq-server

 3、查看RabbitMQ的运行状态

sudo rabbitmqctl status

 4、安装RabbitMQ的管理面板开启

sudo rabbitmq-plugins enable rabbitmq_management

 5、访问管理页面

地址:127.0.0.1:15672

默认用户名和密码都是guest ,但只限本地访问

 

6、登录服务器管理面板需要创建一个用户

sudo rabbitmqctl add_user 用户名 密码

7、将管理员权限给予创建的用户

sudo rabbitmqctl set_user_tags admin administrator

8、使用创建好的用户再次登录

使用Java操作消息队列

1、导入依赖

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

2、实现生产者将信息发送到消息队列

public static void main(String[] args) {
    //创建连接
    ConnectionFactory factory = new ConnectionFactory();

    //设定连接信息
    factory.setHost("127.0.0.1");
    factory.setPort(5672);
    factory.setUsername("admin");
    factory.setPassword("admin");
    factory.setVirtualHost("/test");
  
 		//创建连接
    try(Connection connection = factory.newConnection()){
        
    }catch (Exception e){
        e.printStackTrace();
    }
}

在程序中定义并创建消息队列 

try(Connection connection = factory.newConnection();
    Channel channel = connection.createChannel()){   //创建新的Channel
  	//声明队列,如果队列不存在会自动创建
    channel.queueDeclare("abc", false, false, false, null);
  	//将队列绑定到交换机
    channel.queueBind("abc", "amq.direct", "test-abc");
  	//发布新的消息,注意消息需要转换为byte[]
    channel.basicPublish("amq.direct", "test-abc", null, "Hello World!".getBytes());
}catch (Exception e){
    e.printStackTrace();
}

 3、实现消费者读取消息队列中的信息

public static void main(String[] args) throws IOException, TimeoutException {
    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("127.0.0.1");
    factory.setPort(5672);
    factory.setUsername("admin");
    factory.setPassword("admin");
    factory.setVirtualHost("/test");

    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    //创建一个基本的消费者
    channel.basicConsume("abc", false, (s, delivery) -> {
        System.out.println(new String(delivery.getBody()));
        //basicAck是确认应答
        channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
        //拒绝应答
        //channel.basicNack(delivery.getEnvelope().getDeliveryTag(), false, false);
        //channel.basicReject(delivery.getEnvelope().getDeliveryTag(), false);
    }, s -> {});
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fittt_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值