IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Rabbitmq的学习 -> 正文阅读

[大数据]Rabbitmq的学习

Rabbitmq是一款消息中间件:其凭借高可靠,以扩展,高可用,以及丰富的功能,使得互联网中越来越多的公司用到,所以我们就要学习学习了
消息队列中间件(Message Queue Middleware)简称MQ
消息中间件的作用:解耦 冗余 扩展 削峰 可恢复性 顺序保证(线程) 缓冲 异步通信
Rabbitmq是采用ERlang语言编写的,所以在配置Rabbitmq环境时需要配置ERlang语言
Rabbitmq是实现了AMQP(Advanced Message Queuing Protocol 高级消息队列)协议的消息中间件

安装Rabbitmq:我是基于Centos8版本安装的 (默认有ERlang环境)
1.下载ERlang[:erlang环境下载地址](https://github.com/rabbitmq/erlang-rpm/releases%EF%BC%9Aerlang%E7%8E%AF%E5%A2%83%E4%B8%8B%E8%BD%BD%E5%9C%B0%E5%9D%80)
2.使用工具放入指定文件夹:rpm -Uvh erlang-24.1-1.el8.x86_64.rpm :解压
3.安装erlang:yum install -y erlang     erl -v:安装成功就能看到版本信息
4.安装基本类库:yum install -y socat
5.下载Rabbitmq[Rabbitmq下载](https://www.rabbitmq.com/install-rpm.html#downloads)
6.rpm -Uvh rabbitmq-server-3.9.7-1.el8.noarch.rpm :解压
7.安装yum install -y rabbitmq-server
8.如果需要web页面访问需要安装插件 rabbitmq-plugins enable rabbitmq_management
9.需要设置用户用来管理:添加用户:rabbitmqctl add_user 名字 密码
                      分配权限:rabbitmqctl set_user_tags 名字 用户级别
                      rabbitmqctl set_permissions -p "/" 用户名 ".*" ".*" ".*" :为用户设置所有权限
                      用户级别:administrator:超级管理员
							   monitoring:监控者:可以看到所有的节点,但是不能操作
							   policymaker:策略定制者:可以自己创建自己的节点
							   management:普通管理员:只能看到自己的信息

基本命令:

systemctl start rabbitmq-server :启动服务
systemctl restart rabbitmq-server :重启服务
systemctl stop rabbitmq-server :关闭服务
systemctl status rabbitmq-server :查看服务状态

测试发送HelloWorld:

<!--添加Maven依赖->
    <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
        <version>5.9.0</version>
    </dependency>

生产者(生产消息):

package ceshi;
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 RabbitProducer {
    public static void main(String[] args) {
        ConnectionFactory connectionFactory=new ConnectionFactory();//创建连接工厂
        Connection connection =null;
        Channel channel =null;
        try {
            connectionFactory.setHost();//设置主机 你的IP地址
            connectionFactory.setPort();//设置端口 默认是5672
            connectionFactory.setUsername();//设置用户
            connectionFactory.setPassword();//设置密码
            connectionFactory.setVirtualHost();//设置虚拟目录,类似数据库中的库,默认是 /
            connectionFactory.setConnectionTimeout();//设置连接超时
             connection=connectionFactory.newConnection();//通过连接工厂创建连接
            channel= connection.createChannel();//通过连接创建通道
            channel.queueDeclare("helloworld",false,false,false,null);//创建队列
            channel.basicPublish("","helloworld",null,"helloworld".getBytes());//往队列里推送消息
            System.out.println("发送消息成功");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        } finally {
            try {
                if (channel!=null) {//关闭通道
                    channel.close();
                }
                if (connection!=null) {//关闭连接
                    connection.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (TimeoutException e) {
                e.printStackTrace();
            }
        }
    }
}

消费者(接收消息):

package ceshi;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class RabbitConsumer {
    public static void main(String[] args) {
        ConnectionFactory connectionFactory=new ConnectionFactory();//创建连接工厂
        Connection connection =null;
        Channel channel =null;
        try {
            connectionFactory.setHost("123.57.158.37");//设置主机
            connectionFactory.setPort(5672);//设置端口
            connectionFactory.setUsername("lengxin");//设置用户
            connectionFactory.setPassword("123456rjx");//设置密码
            connectionFactory.setVirtualHost("/");//设置虚拟目录
            connectionFactory.setConnectionTimeout(50000);//设置连接超时
            connection=connectionFactory.newConnection();//通过连接工厂创建连接
            channel= connection.createChannel();//通过连接创建通道
            channel.basicConsume("helloworld",true,new DefaultConsumer(channel){//接收消息
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    System.out.println("传递的消息为:"+new String(body));
                }
            });
            System.out.println("接收消息");
            System.in.read();//阻塞方法
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        } finally {
            try {
                if (channel!=null) {//关闭通道
                    channel.close();
                }
                if (connection!=null) {//关闭连接
                    connection.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (TimeoutException e) {
                e.printStackTrace();
            }
        }
    }
}
方法参数详解:
1.队列名称 2.是否持久化 3.排他性(独占) 4.是否自动删除(消费完成后) 5.携带参数
channel.queueDeclare("helloworld",false,false,false,null);//创建队列
1.交换机名称 2.队列名称 3.传递消息额外配置(消息持久化) 4.消息具体内容(必须是字节数组)
channel.basicPublish("","helloworld",null,"helloworld".getBytes());//往队列里推送消息
1.消费队列名称 2.开始消息的自动确认机制 3.消费时的回调接口
 channel.basicConsume("helloworld",true,new DefaultConsumer(channel){//接收消息

相关概念:
在这里插入图片描述
生产者(Producer):负责发送(生产)消息
消费者(Consumer):负责接收(消费)消息
Broker服务节点:看做一台Rabbitmq服务器,生产者往进放,消费者往出取
队列: 是Rabbitmq的内部对象,用于储存消息
交换机(Exchange):用来和队列绑定
在这里插入图片描述
路由key(Routing key):用来指定这个消息的路由规则(匹配)
绑定(Binding):将交换机与队列关联起来

rabbitmq的几种模式:
helloworld模式:
在这里插入图片描述
一个生产者和一个消费者绑定同一个队列

工作队列模式:
在这里插入图片描述
一个生产者多个消费者,绑定同一个队列,默认是轮询(消费平等,不会因为消费快就多消费,消费慢就少消费) 可以手动设置,使其不是平等消费

发布与订阅模式(Publish/Subscribe)Fanout:绑定同一个交换机,生产者发送消息到交换机,其余队列里的消费者都能监听到消息在这里插入图片描述
Direct(直连):通过Routing key 来配置连接
在这里插入图片描述
Topic(主题模式):通过Routing key 动态匹配

在这里插入图片描述
SpringBoot整合Rabbitmq :单独写
TTL
死信队列
rabbitmq集群
分布式事务

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-25 12:36:07  更:2021-10-25 12:38:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:12:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码