MQ(二)RabbitMQ快速入门

news2024/11/14 0:39:05

一、RabbitMQ 概述和安装

RabbitMQ 是基于 Erlang 语言开发的开源消息通信中间件

1. RabbitMQ的结构和概念

RabbitMQ中的几个概念:

(1)channel:操作MQ的工具

(2)exchange:路由消息到队列中

(3)queue:缓存消息

(4)virtual host:虚拟主机,是对queue、exchange等资源的逻辑分组 

二、常见消息模型

MQ的官方文档中给出了5个 MQ 的 Demo 示例,对应了几种不同的用法:

(1)基本消息队列(BasicQueue)

(2) 工作消息队列(WorkQueue)

 

 (3)发布订阅(Publish、Subscribe),又根据交换机类型不同分为三种:

1️⃣Fanout Exchange:广播

2️⃣Direct Exchange:路由

 

3️⃣Topic Exchange:主题

 

 

三、快速入门

1. HelloWorld 案例

官方的 HelloWorld 是基于最基础的消息队列模型来实现的,只包括三个角色:

(1)publisher:消息发布者,将消息发送到队列 queue

(2)queue:消息队列,负责接受并缓存消息

(3)consumer:订阅队列,处理队列中的消息

(1)基本消息队列的消息发送流程:

1️⃣建立 connection

2️⃣创建 channel

3️⃣利用 channel 声明队列

4️⃣利用 channel 向队列发送消息

public class PublisherTest {
    @Test
    public void testSendMessage() throws IOException, TimeoutException {
        // 1.建立连接
        ConnectionFactory factory = new ConnectionFactory();
        // 1.1.设置连接参数,分别是:主机名、端口号、vhost、用户名、密码
        factory.setHost("192.168.150.101");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("itcast");
        factory.setPassword("123321");
        // 1.2.建立连接
        Connection connection = factory.newConnection();

        // 2.创建通道Channel
        Channel channel = connection.createChannel();

        // 3.创建队列
        String queueName = "simple.queue";
        channel.queueDeclare(queueName, false, false, false, null);

        // 4.发送消息
        String message = "hello, rabbitmq!";
        channel.basicPublish("", queueName, null, message.getBytes());
        System.out.println("发送消息成功:【" + message + "】");

        // 5.关闭通道和连接
        channel.close();
        connection.close();

    }
}

 (2)基本消息队列的消息接收流程:

1️⃣建立 connection

2️⃣创建 channel

3️⃣利用 channel 声明队列

4️⃣定义 consumer 的消费行为 handleDelivery()

5️⃣利用 channel 将消费者与队列绑定

public class ConsumerTest {

    public static void main(String[] args) throws IOException, TimeoutException {
        // 1.建立连接
        ConnectionFactory factory = new ConnectionFactory();
        // 1.1.设置连接参数,分别是:主机名、端口号、vhost、用户名、密码
        factory.setHost("192.168.150.101");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("itcast");
        factory.setPassword("123321");
        // 1.2.建立连接
        Connection connection = factory.newConnection();

        // 2.创建通道Channel
        Channel channel = connection.createChannel();

        // 3.创建队列
        String queueName = "simple.queue";
        channel.queueDeclare(queueName, false, false, false, null);

        // 4.订阅消息
        channel.basicConsume(queueName, true, new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope,
                                       AMQP.BasicProperties properties, byte[] body) throws IOException {
                // 5.处理消息
                String message = new String(body);
                System.out.println("接收到消息:【" + message + "】");
            }
        });
        System.out.println("等待接收消息。。。。");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/12623.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构知识点补充

(67条消息) c语言怎么return ok,C语言中的 return与exit_哈哈哈可以的博客-CSDN博客 假如把i或i放入到for循环的函数体中,若没有变量或函数来接收其返回值,那么它们的作用效果也是相同的(67条消息) C语言的for循环中i和i的关系_肥嘟嘟的左卫门的博客-CSD…

1226:装箱问题 (贪心)

【题目描述】 一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为11,22,33,44,55,66。这些产品通常使用一个66h的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂…

爬虫工具-BeautifulSoup

BeautifulSoup: 1. 是一个高效的网页解析库,可以从HTML或者XML文件中提取数据 2. 支持不同的解析器,可以对HTML、XML等进行解析 3. 是一个敏感又方便的网页解析库,处理高效,支持多种解析器 4. 利用它在不编写正则表达式…

Unreal 和 Unity 3D 各有什么特点?如何选择?

一、两个引擎简述 Unreal Engine VS Unity Unity是实时3D互动内容创作和运营平台。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助Unity将创意变成现实。Unity平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的…

【设计模式】软件设计原则

1. 软件设计原则: 为了提高系统软件的可维护性、可复用性、可扩展性和灵活性 1.1 开闭原则: 对扩展开放,对修改关闭 (热插拔) 实现方式: 通过定义接口和实现类的方式实现开闭原则,我们再进行…

ASEMI代理艾赛斯IXTY02N50D-TRL车规级MOSFET

编辑-Z 艾赛斯车规级MOS管IXTY02N50D-TRL参数: 型号:IXTY02N50D-TRL 漏极-源极电压(VDS):500V 连续漏电流(ID):200mA 功耗(PD):25W 工作结温…

如何运营推特营销主账号

在推特上做产品推广,Twitter群(发)推王建议:一般需要两类账号。 主账号:也就是官方号,用来聚集粉丝,日常产品信息、新闻资讯发布的; 批量推广号:也叫小号或者广告号&am…

oracle数据库定义语言—DDL

文章目录1、数据定义语言2 创建表2.2 oracle 数据库中的表2.2.1 常见的数据字典表2.3 用查询创建表2.3.1 示例3 ALTER TABLE 语句3.1 添加一个新的列3.2 修改数据类型3.3 修改默认值3.4 修改列名3.5 删除一个列4、修改名称5、截断表6 、删除表(删除表以及表结构&…

《垃圾回收算法手册 自动内存管理的艺术》——引用计数与垃圾回收器的比较(笔记)

文章目录五、引用计数5.1 引用计数算法的优缺点5.2 提升效率5.3 延迟引用计数5.4 合并引用计数5.5 环状引用计数**步骤**5.6受限域引用计数六、垃圾回收器的比较6.1 吞吐量6.2 停顿时间6.3 内存空间6.4 回收器的实现6.5 自适应系统6.6 统一垃圾回收理论6.6.1 垃圾回收的抽象6.6…

神经网络在故障诊断中的应用

人工神经网络是近年来发展迅速,广泛地应用于各个领域,包括航天,自动控制,金融,电子,制造,医药等多个行业,已经有许多成功的先例,并展示了更为广阔的应用前景。基于神经网…

【区块链 | 智能合约】Ethereum源代码(8)- Ethereum服务和以太坊P2P协议发送广播源码分析

在“【区块链 | 智能合约】Ethereum源代码(2)- go-ethereum 客户端入口代码和Node分析”一文中,我们提到Ethereum作为一个service,被Node 注册进去。Node start的时候会启动其注册的所有服务,Ethereum service也是一样。 一、ethereum service的初始化和启动 func geth(c…

【MySQL数据库笔记 - 进阶篇】(二)索引

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:暂定 📝视频地址:黑马程序员 MySQL数据库入门到精通 📣专栏定位:这个专栏我将会整理 B 站黑马程序员的 MySQL…

day064:File类与I/O流、绝对路径与相对路径、File类的成员方法

目录 一、什么是File类、IO流 1.File类 2.I/O流 3.File类的构造方法 二、绝对路径与相对路径 三、File类的成员方法 1.File类的创建功能 (1)createNewFile() 创建空的文件 (2)mkdir() 创建单级文…

CY5.5(Cyanine5.5) azide, 10 mM/DMSO,花菁染料Cy5.5标记叠氮

产品名称:花菁染料Cy5.5标记叠氮 英文名称:CY5.5(Cyanine5.5) azide 该染料具有远红外/近红外发射,可用于NIR活体成像。Cyanine5.5可以取代Cy5.5、Alexa Fluor 680和DyLight 680。 CAS:2183440-52-8 分子式:C43H49ClN6O 分子量:701.36 …

简单工厂、工厂方法、抽象工厂、抽象工厂加简单工厂

简单工厂模式:简单工模式时类的创建模式,又叫做静态工厂方法(static Factory Method)。简单工厂模式是一个工厂对象决定创建出哪一种产品类的实例。它存在的目的很简单:定义一个创建对象的接口。简单工厂模式的最大优点…

Spring Boot之容器功能

目录 一.Spring 注入组件的注解 二.Configuration 1.代码演示 1.1JavaBean--》Monster.java 1.2配置类 1.3执行代码 2.Configuration 注意事项和细节 三.Import 1.创建两个JavaBean类 2.注入类 3.测试注解的使用 四.Conditional 1.Conditional 介绍 2.应用实例 …

攻防世界 看雪看雪看雪

看雪看雪看雪 题目附件里面给了张图 尝试文件拆解 无果 尝试放入winhex查找信息 无果 尝试放入stegsolve查找信息 无果 题目说雪 刚好有一种snow隐写的方法 但好像跟图片没有什么关系 后来发现存在ntfs流隐写 你解压之后也可以看到 这里我们使用7zip打开附件的压缩包…

【长难句分析精讲】同位语从句

分析技巧 形式: 抽象名词 that / whether形式: 具体名词 同位语(名词短语)如:成都,四川省会 练习一 一划二从三主 这里 and 不是关键词 苹果掉到地上而不是掉到树上这个事实,回答了他一直都…

【Jmeter基础篇】05:Linux服务器上部署并运行Jmeter脚本

配置之前请务必已安装JDK并配置好JDK的环境变量。 1. 上传压缩包到Linux服务器 使用FTP即可(最好是新建一个/usr/Application/Jmeter的文件夹,放进去。也可以使用自己喜欢的路径) # -p的作用是防止当上层文件夹不存在时报错。想体验的话可以…

Flink的六种物理分区策略

文章目录物理分区(Physical Partitioning)🍕1.随机分区(shuffle)🍔2.轮询分区(Round-Robin)🍟3. 重缩放分区(rescale)🌭4.广播&#x…