RabbitMQ使用详解

刚刚用了,记录下来,以后忘了,方便能够快速想起来。

首先说明,由于RabbitMQ服务端非JAVA,C++语言,当然也就看不懂,所以本文的理解都是过于主观的。

  • 一,RabbitMQ服务端搭建

    推荐最好的安装方式:去官网,去官网,去官网,重要的事情说三遍。

    我一般的操作流程是:用google右上角翻译网页,然后看个大概意思,然后再显示原网页,一个单词单词的看。

    还是总结一下Ubuntu,RabbitMQ安装步骤(依次执行下面四条命令就ok了):

1echo 'deb http://www.rabbitmq.com/debian/ testing main' |
     sudo tee /etc/apt/sources.list.d/rabbitmq.list
2wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc |
     sudo apt-key add -
3sudo apt-get update
4sudo apt-get install rabbitmq-server
  • 二,服务端基本配置

    服务端配置,基本上不需要配置就能满足大多数需求。官网如是说,且相信他一次   

    2.1 界面管理插件的安装

    先说一下ubuntu目录下面的日志目录,与脚本目录,一般这是我们最关心的目录:

    1,日志目录: /var/log/robbitmq-server 可以通过/etc/logrotate.d/rabbitmq-server进行配置
    2,脚本目录:/usr/lib/rabbitmq/bin/

    然后进入到脚本目录也就是(cd /usr/lib/rabbitmq/bin/),执行如下命令

      rabbitmq-plugins enable rabbitmq_management

    这样管理插件算是装好了。

    2.2 用户管理

    通过http://localhost:15672登录会发现(默认用户guest,密码也是guest),认证失败(登录失败去日志文件查找原因)。

    然后自然需要授权了,给一个授权的命令demo,详情自行脑补:   

     #username就是用户名,可以随便取,pwd就是你要设置的密码
     rabbitmqctl add_user username pwd
     #administrator为用户的角色,与tomcat那种管理员配置有点像
     rabbitmqctl set_user_tags username administrator
     #授予权限  /代表vhost主机根目录,后面的*j就是读写之类的权限
     rabbitmqctl set_permissions -p / username ".*" ".*" ".*"

    授权之后,讲道理就能登录了,可以看到下面这样的界面:

  • 三,RabbitMQ的工作原理(例子稍后奉上)

    先体验一下整个消息投递过程:

    

 

    3.1 RabbitMQ的核心:

    核心官网有介绍,说的connecnton,channel之类的,到底怎么样,who care? 

    总体来看,我们关注业务实现是:1)消息怎么投递的。2)消费者怎么消费消息。3)消息是否是可靠投递。4)消息投递方式。5)消息的生命周期。6)消息队列生命周期

    3.2  消息是怎么投递的?(记住一点,生产者消息投递都是面向交换机的)

    RabbitMQ 是面向交换机投递消息的。交换机可能绑定有许多队列,交换机如何将消息投递给这些队列呢?

    首先说一下面向交换机的设计的优势:1)这明显借助了数据链路层那个交换机的设计思想。除了层级分明以外,还能从分提高链路利用率(可能有点抽像)。

                     2)从代码层面来看:如果没有交换机,你至少得维护一个十分庞大的路由表,然后从路由表正确投递消息,有了交互机,这里路

                      由表就会被拆分到多个交换机里面,效果不必多说。

                       3)然后就是高度的解耦,不同的交换机可有不同的路由规则,要是没有交换机。。。。。。

    在RabbitMQ,交换机有4种投递方式,就是枚举类BuiltinExchangeType的4个枚举变量:

       DIRECT:会将所有消息先取消息的ROUTE_KEY,然后投递到与ROUTE_KEY绑定的队列里面(if(msg.routekey.equals(queue.routekey)))。

    FANOUT:此种模式下,根本不检查消息的ROUTE_KEY,直接投送到交换机所拥有的所有队列里面。

    TOPIC,HEADERS自行看一下官网怎么说的,不想码字了^_^||

    总结起来就一个函数就把消息发出去了:channel.basicPublish(excange_name,route_key,false,bs,"test".getBytes());可以去官网查一下这个API

    3.3 消费者怎么消费消息(记住一点,消费者消费消息是面向消息队列的,这与生成者有点不一样)

    还不是就是TCP长连接心跳的那些事,就是这么一个API:channel.basicConsume(QUEUE_AUTODELETE, true, consumer);consumer是Consumer类的一个实例,

    你直接去处理回调接口就ok了

    3.4 消息传递是否可靠

    很明显是可靠的,除非你将消息队列,声明成非持久模式,这事你又重启了机器。这会丢失消息的。还有就是他有应答机制,你可以通过设置消费者消费消息的模式,

    去手动应答。channel.basicConsume(?,autoACk,?)的autoAck参数设置

    3.5 消息的生命周期

    一旦受到消费者应答,标识消息已被消费,则消息被回收掉。

    3.6 队列生命周期

    channel.queueDeclare(QUEUE_NAME,false,false,true,null);

    第二个参数设置为true,会将消息持久化到磁盘,第四个参数设置为true表示没有消息并且没有连接则删除改队列,详情可以查一下API

  • 四、一个示例

    4.1 生产者代码:

      自行导入相关依赖包或相关依赖

      

复制代码
      ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        factory.setUsername("username");
        factory.setPort(5672);//注意这里的端口与管理插件的端口不一样
        factory.setPassword("pwd");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        //声明一个dirent模式的交换机
        channel.exchangeDeclare("exchange_name",BuiltinExchangeType.DIRECT,true);
        //声明一个非持久化自动删除的队列
        channel.queueDeclare("queue_name",false,false,true,null);//如果该队列不在被使用就删除他 zhe
        //将绑定到改交换机
        channel.queueBind("queue_name","exchange_name","route_key");
        //声明一个消息头部
        Map<String,Object> header=new HashMap<>();
        AMQP.BasicProperties.Builder b= new AMQP.BasicProperties.Builder();
        header.put("charset","utf-8");
        b.headers(header);
        AMQP.BasicProperties bp=b.build();
        //将消息发出去
       channel.basicPublish("exchange_name","route_key",false,bp,"test3".getBytes());
复制代码

    4.2 消费者代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ConnectionFactory factory = new ConnectionFactory();
  factory.setHost("localhost");
  factory.setUsername("username");
  factory.setPort(5672);//注意这里的端口与管理插件的端口不一样
  factory.setPassword("pwd");
  Connection connection = factory.newConnection();
  Channel channel = connection.createChannel();
  //声明一个dirent模式的交换机
  channel.exchangeDeclare("exchange_name",BuiltinExchangeType.DIRECT,true);
  //声明一个非持久化自动删除的队列
  channel.queueDeclare("queue_name",false,false,true,null);//如果该队列不在被使用就删除他 zhe
  //将绑定到改交换机
  channel.queueBind("queue_name","exchange_name","route_key");
  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(" [x] Received '" + message + "'");
      }
  };
  channel.basicConsume("queue_name"true, consumer);
<think>嗯,用户想在Windows安装Nexus仓库管理器,我得想想怎么回答。首先,我得回忆一下安装Nexus的步骤,可能需要JDK作为前置条件。记得Nexus需要Java环境,所以得确认JDK的版本,比如是否要JDK 8或者更高版本。然后,用户需要下载NexusWindows版本,官网应该提供zip包。解压之后,可能需要配置环境变量,或者通过命令行安装服务。 然后安装步骤应该包括下载、解压、配置环境变量、安装服务、启动服务这些步骤。注意事项可能有防火墙设置,端口冲突,还有初始密码的位置。记得Nexus默认端口是8081,要检查是否被占用。另外,数据目录的位置和备份也很重要,需要提醒用户。 用户可能遇到的问题包括服务启动失败,可能是Java路径不对或者权限不足。还要注意初始登录后要修改密码,以及如何访问管理界面。可能需要引用一些参考资料,比如Jenkins插件管理或者Git初始化的步骤,不过这些引用好像不太相关,可能需要调整。要确保步骤清晰,用中文,并且语法正确,符合用户的系统级指令要求。</think>### 在 Windows 操作系统上安装 Nexus 仓库管理器的步骤 #### **前置条件** 1. **安装 Java 环境** Nexus 3.x 需要 JDK 8 或更高版本。可通过以下命令验证是否已安装: ```bash java -version ``` 若未安装,需从 [Oracle JDK](https://www.oracle.com/java/technologies/downloads/) 或 [OpenJDK](https://adoptium.net/) 下载并安装[^2]。 2. **系统权限** 确保当前用户具有管理员权限,以便安装服务及修改系统配置。 --- #### **安装步骤** 1. **下载 Nexus** 访问 [Nexus 官方下载页面](https://www.sonatype.com/products/repository-oss-download),选择 Windows 版本(`.zip` 格式)并下载。 2. **解压文件** 将下载的压缩包解压到目标目录(如 `C:\nexus`),解压后会生成两个文件夹: - `nexus-<version>`:包含运行文件 - `sonatype-work`:存储数据文件(仓库、日志等) 3. **配置环境变量(可选)** 如需通过命令行快速访问,可将 Nexus 的 `bin` 目录(如 `C:\nexus\nexus-<version>\bin`)添加到系统环境变量 `PATH` 中。 4. **安装 Nexus 服务** 以管理员身份打开命令提示符,执行以下命令: ```bash cd C:\nexus\nexus-<version>\bin nexus.exe /install ``` 5. **启动服务** ```bash nexus.exe /start ``` 服务启动后,默认监听端口 `8081`。可通过浏览器访问 `http://localhost:8081` 进入管理界面[^1]。 6. **初始化配置** - **登录**:默认管理员账号为 `admin`,初始密码位于 `sonatype-work\nexus3\admin.password`。 - **修改密码**:首次登录后需重置密码。 - **配置存储路径**:在管理界面中可调整数据存储目录[^3]。 --- #### **注意事项** 1. **端口冲突** 若端口 `8081` 被占用,需修改 `nexus-<version>\etc\nexus-default.properties` 中的 `application-port` 参数。 2. **防火墙设置** 确保防火墙允许 `8081` 端口的入站连接。 3. **数据备份** 定期备份 `sonatype-work` 目录以防止数据丢失。 4. **服务管理** 使用 `nexus.exe /stop` 停止服务,`nexus.exe /uninstall` 卸载服务。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值