Rabbit MQ

一、概念

  • RabbitMQ是一个开源的遵循AMQP协议实现的机遇Erlang语言编写、支持多种客户端。用于在分布式系统中存储消息、转发消息,具有高可用、高可扩、高可靠、易用性等特征
  • download

二、常用命令

# 创建一个用户
rabbitmqctl add_user yoho8 yoho8

# 分配角色
rabbitmqctl set_user_tags yoho8 administrator

# 角色授权
rabbitmqctl set_permissions yoho8 ".*" ".*" ".*"

三、简单模式 代码

// 生产者
public class Send {
  // 声明通道名称
  private final static String QUEUE_NAME = "hello";
  public static void main(String[] argv) throws Exception {
      ConnectionFactory factory = new ConnectionFactory();
      factory.setHost("localhost");
      try {
        // 创建连接connection
        Connection connection = factory.newConnection();
        // 通过连接获取通道Channel
        Channel channel = connection.createChannel();
        /*
        * 声明通道
        * @params1 队列的名称
        * @params2 是否要持久化,true-持久化,false-非持久化;非持久化会存盘,但是会随着服务重启而丢失
        * @params3 排他性,是否是独占独立
        * @params4 是否自动删除,随着最后一个消费者消息完毕以后是否把队列自动删除
        * @params5 携带附属参数
        */
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        // 准备消息内容
        String message = "Hello World!";
        // 发送消息给队列queue
        // @params1 交换机,exchange
        // @params2 队列、路由key
        // @params3 消息状态控制
        // @params4 消息主体
        // 可以存在没有交换机的队列吗?不可能,虽然没有指定交换机,但是一定会存在一个默认的交换机。消息一定是通过交换机投递给queue的
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
        System.out.println(" [x] Sent '" + message + "'"); 
      } catch() {
      } final {
      
      }
  }
}
// 接收者
public class Recv {

  private final static String QUEUE_NAME = "hello";

  public static void main(String[] argv) throws Exception {
    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost");
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    channel.queueDeclare(QUEUE_NAME, false, false, false, null);
    System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
    
    DeliverCallback deliverCallback = (consumerTag, delivery) -> {
        String message = new String(delivery.getBody(), "UTF-8");
        System.out.println(" [x] Received '" + message + "'");
    };
    channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
  }
}
posted @   北子_bro  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示