消息队列-RabbitMQ

Linux系统RabbitMQ配置

1.下载虚拟机并解压

Linux下载链接:https://pan.baidu.com/s/1bAjZqwkLYiCTGVdxr7eFOw
提取码:o557
在这里插入图片描述
在这里插入图片描述

2.修改虚拟机的名字

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.设置固定 ./ip-static

在这里插入图片描述

4.MobaXterm_Personal连接虚拟机

MobaXterm_Personal下载链接:https://pan.baidu.com/s/1P5AfbytrrtI8CqoX8p0rhw
提取码:txjk
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.解压rabbitMQ解压文件拖入MobaXterm_Personal

rabbitMQ链接:https://pan.baidu.com/s/1kTS-8pG1n6Q_ad40YdnFMA
提取码:q2w6
在这里插入图片描述

4.1进入文件夹

安装

rpm -ivh *.rpm

Yum在线安装
以下内容来自 RabbitMQ 官方手册

rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc

# centos7 用这个
cat <<EOF > /etc/yum.repos.d/rabbitmq.repo
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/el/7/
gpgcheck=0
repo_gpgcheck=0
enabled=1
EOF


# centos6 用这个
cat <<EOF > /etc/yum.repos.d/rabbitmq.repo
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/el/6/
gpgcheck=0
repo_gpgcheck=0
enabled=1
EOF


yum makecache

yum install socat

wget https://github.com/rabbitmq/erlang-rpm/releases/download/v21.3.8.12/erlang-21.3.8.12-1.el7.x86_64.rpm
rpm -ivh erlang-21.3.8.12-1.el7.x86_64.rpm --force --nodeps

yum install rabbitmq-server

4.2 启动rabbitmq服务器

# 设置服务,开机自动启动
systemctl enable rabbitmq-server

# 启动服务
systemctl start rabbitmq-server

4.3 rabbitmq管理界面

启用管理界面

# 开启管理界面插件
rabbitmq-plugins enable rabbitmq_management

# 防火墙打开 15672 管理端口
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload

4.4 开启管理界面插件

rabbitmq-plugins enable rabbitmq_management

4.5防火墙打开 15672 管理端口

firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload

4.6重启RabbitMQ服务

systemctl restart rabbitmq-server

访问
访问服务器的15672端口,例如:

http://192.168.64.140:15672

添加用户

# 添加用户
rabbitmqctl add_user admin admin

# 新用户设置用户为超级管理员
rabbitmqctl set_user_tags admin administrator

设置访问权限
在这里插入图片描述
在这里插入图片描述
用户管理参考
https://www.cnblogs.com/AloneSword/p/4200051.html

开放客户端连接端口

# 打开客户端连接端口
firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --reload

主要端口介绍
4369 – erlang发现口
5672 – client端通信口
15672 – 管理界面ui端口
25672 – server间内部通信口

Java类中RabbitMQ配置

简单模式

导入依赖

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

生成者配置

package m1_sinple;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

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

public class Producer {
    public static void main(String[] args) throws IOException, TimeoutException {
          //连接Rabbitmq服务器
          ConnectionFactory f=new ConnectionFactory();
          f.setHost("192.168.126.140");//www.wht6.cn
          f.setPort(5672);//收发消息端口  15672  管理界面
          f.setUsername("admin");
          f.setPassword("admin");
          //定义队列
           /*
           如果使用我的服务器,每个同学使用自己的虚拟主机,避免相互影响
            */
            f.setVirtualHost("/nq");//设置虚拟主机
           Connection con=f.newConnection();
           Channel c= con.createChannel();


          //发送消息
        //五个参数
        //队列名,是否持久队列,是否排他(独占)队列,是否自动删除,其他参数属性
        c.queueDeclare("helloworld",false,false,false,null);
        //发送参数
        //4个参数
        //空串  --后面用到时在介绍,队列名,其他参数属性,消息数据

        c.basicPublish("","helloworld",null,"Hello word".getBytes());
        System.out.println("消息已经发送");
        c.close();
        con.close();
    }
}

消费者配置

package m1_sinple;

import com.rabbitmq.client.*;
import jdk.nashorn.internal.runtime.regexp.joni.constants.Arguments;
import sun.plugin2.message.Message;

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

public class Consumer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //连接
        ConnectionFactory f=new ConnectionFactory();
        f.setHost("192.168.126.140");
        //f.setPort(5672);默认端口可以省略
        f.setUsername("admin");
        f.setPassword("admin");
        f.setVirtualHost("/nq");

       Channel c =f.newConnection().createChannel();
       //定义队列
        c.queueDeclare("helloworld",false,false,false, null);

        DeliverCallback deliverCallback=new DeliverCallback(){

            @Override
            public void handle(String consumerTage, Delivery message) throws IOException {
                byte[] body= message.getBody();
                String msg= new String(body);
                System.out.println("收到:"+msg);


            }
        };
        CancelCallback cancelCallback=new CancelCallback() {
            @Override
            public void handle(String s) throws IOException {

            }
        };
        //
        c.basicConsume("helloworld",true,deliverCallback, cancelCallback);

    }
}

工业模式

生成者模式

package m2_work;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;

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

public class Producer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //连接
        ConnectionFactory f=new ConnectionFactory();
        f.setHost("192.168.126.140");
        //f.setPort(5672);
        f.setUsername("admin");
        f.setPassword("admin");
        f.setVirtualHost("/nq");
        Channel c=f.newConnection().createChannel();

        //定义消息队列
        c.queueDeclare("task_queue",true,false,false,null);


        //发送消息
        while (true){
            System.out.print("输入消息:");
            String msg=new Scanner(System.in).nextLine();
            c.basicPublish("","task_queue", MessageProperties.PERSISTENT_TEXT_PLAIN,msg.getBytes());
        }
    }
}

消费者模式

package m2_work;


import com.rabbitmq.client.*;
import sun.plugin2.message.Message;

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

public class Consumer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //连接
        ConnectionFactory f=new ConnectionFactory();
        f.setHost("192.168.126.140");
        //f.setPort(5672);
        f.setUsername("admin");
        f.setPassword("admin");
        f.setVirtualHost("/nq");
        Channel c=f.newConnection().createChannel();

        //定义队列
        c.queueDeclare("task_queue",true,false,false,null);

        DeliverCallback deliverCallback=new DeliverCallback() {
            @Override
            public void handle(String s, Delivery message) throws IOException {
                String msg=new String(message.getBody());
                System.out.println("收到消息:"+msg);
                for(int i=0;i<msg.length();i++){
                   if(msg.charAt(i)=='.'){
                       try {
                           Thread.sleep(1000);
                       } catch (InterruptedException e) {
                       }
                   }
                }
               c.basicAck(message.getEnvelope().getDeliveryTag(),false);
                System.out.println("消息处理完成");
            }
        };


      CancelCallback cancelCallback=new CancelCallback() {
          @Override
          public void handle(java.lang.String s) throws IOException {

          }
      };
     //QOS :Quality Of service
        //理解:每次抓取消息的数量
        //如果设置为1,每次抓取的数量为1,这条消息处理完成之前,不会自动抓取
        //必须在手动ack里面设置
        c.basicQos(1);


      // 设置手动ack  b设置为fasle
       c.basicConsume("task_queue",false,deliverCallback,cancelCallback);
      System.out.println("开始消费数据");
    }


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值