RabbitMQ点对点的原理和使用

Springboot下RabbitMQ 封装实现,支持点对点消息,广播消息、延时消息 如何避免项目中消息队列使用泛滥,大量重复代码和逻辑无处不再,数据跟踪困难,代码维护心累,您可以看看这个小工具。 阅读详情

RabbitMQ点对点的原理和使用

1、点对点模式  一对一模式。  一个生产者投递消息给队列 只能允许有一个消费者进行消费    如果集群的话 会进行均摊消费   服务器配置不一样 均摊就不优了 

      

   长连接 不用三次握手之类的 提高传输效率     但是长连接占服务器带宽

推:  消费者已经启动了,建立长连接,一旦生产者向队列投递消息会立马推送给消费者

取: 生产者先投递消息队列进行缓存,这时候消费者再次启动时候 ,就会向队列获取消息。

 

pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.toov5</groupId>
  <artifactId>rabbitmq</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  	<dependencies>
		<dependency>
			<groupId>com.rabbitmq</groupId>
			<artifactId>amqp-client</artifactId>
			<version>3.6.5</version>
		</dependency>
	</dependencies>
  
</project>

 创建连接的工具类:

package com.toov5.utils;

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

import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
 
//没有做成单例的  VirtualHost 需要复用
public class MQConnectionUtils {
    //创建新的连接
    public static Connection newConnection() throws IOException, TimeoutException {
         //创建连接工厂
    ConnectionFactory factory= new ConnectionFactory();
    //链接地址
    factory.setHost("192.168.91.6");
    //用户名称
    factory.setUsername("admin");
    //用户密码
    factory.setPassword("admin");
    //amqp端口号
    factory.setPort(5672);
    //连接virtualhost
    factory.setVirtualHost("/admin_toov5");
    Connection connection = factory.newConnection();
        return connection;
    }
    
    
}

Producer类

package com.toov5.Producer;

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

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.toov5.utils.MQConnectionUtils;

public class Producer {
    //队列名称
    private static final String UEUE_NAME = "test_queue";
    
    public static void main(String[] args) throws IOException, TimeoutException {
        //创建新的连接
    Connection connection = MQConnectionUtils.newConnection();
       //创建Channel
        Channel channel = connection.createChannel();
        //创建队列
        channel.queueDeclare(UEUE_NAME, false, false, false, null);
        //创建message
        String msg = "toov5_message";
        System.out.println("生产者投递消息"+msg);
        //生产者发送消息
        channel.basicPublish("",UEUE_NAME, null, msg.getBytes());
        //关闭通道和连接
         channel.close();
         connection.close();
    }
}

 

运行结果

模拟get message

 

 

 producer跟consumer基本类似

package com.toov5.Consumer;

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

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.AMQP.BasicProperties;
import com.toov5.utils.MQConnectionUtils;

public class Consumer {
  
     //队列名称
        private static final String QUEUE_NAME = "test_queue";
        
        public static void main(String[] args) throws IOException, TimeoutException {
            System.out.println("消费者启动..........");
            //创建新的连接
        Connection connection = MQConnectionUtils.newConnection();
           //创建Channel
            Channel channel = connection.createChannel();
            // 消费者关联队列
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            
              DefaultConsumer defaultConsumerr = new DefaultConsumer(channel) {
                  //监听获取消息
                    @Override
                    public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties,
                            byte[] body) throws IOException {
                        String msg =new String(body,"UTF-8");
                        System.out.println("消费者获取生产者消息:"+msg);
                    }
              };
            //牵手模式设置  默认自动应答模式  true:自动应答模式  
              channel.basicConsume(QUEUE_NAME, true, defaultConsumerr);              
              
//            //关闭通道和连接
//             channel.close();
//             connection.close();
        }
}

运行后的结果:

 

【技术派后端篇】一文读懂 RabbitMQ:消息队列模式、原理与优化实践 本文围绕 RabbitMQ 展开,涵盖消息队列两种模式,介绍其原理,给出 Windows 版搭建步骤,展示集成代码并点明连接等问题,通过引入连接池改进,给出新代码与效果,为 RabbitMQ 在项目中的应用提供实操指引 。 阅读详情

相关推荐

rabbitmq点对点发送消息Demo

rabbitMq 发送消息 direct

RabbitMQ系列(二)-点对点模式

RabbitMQ系列(二)-点对点模式 上一篇 : RabbitMQ系列(一)-单机部署 下一篇 : RabbitMQ系列(三)-工作队列模式 这里写目录标题RabbitMQ系列(二)-点对点模式一、 介绍二、 测试2.1 生产者2.2 消费者2.3 联动实时发送和消费测试三、 总结 一、 介绍 1. Rabbitmq作为一个优秀的消息队列中间件,提供很多种消息生产消费的工作模式 2. 点对点模式只是其中的一种. 指的是一个同一时刻,一个生产者,一个队列,一个消费者. 3. 使用默认的default交换机,

rhnxbdbdh的博客 1670

rabbitMQ点对点发送消息

之前的那个demo也可以发送消息,但如果消息接收方没启动服务,这时发送方发送消息,之后接收方再启动服务后就不能再接收后之前发的那个消息。现在这个demo解决了这个问题

SpringBoot整合消息中间件 RabbitMQ 第 3 篇 —— RabbitMQ 点对点模式(动态创建队列名)

RabbitMQ 官网学习地址:https://www.rabbitmq.com/getstarted.html 点对点模式 一个生产者投递消息给队列,只允许有一个消费者进行消费。如果消费者有多个(一个集群),则默认会进行轮询的均摊消费。这里的消费者,是指某一台服务器,而不是某个用户。 消费者应答的方式有2种:自动应答和手动应答。 自动应答:消费者不管对消息处理是否成功,都会通知队列服务器去删除这条消息。如果消息处理失败,会自动补偿。 手动应答:消费者处理完消息,会返回通知(ACK)告诉...

流放深圳 991

rabbitMQ例子

服务端rabbitmq的使用,从服务端发送消息到客户端。可以在rabbotMq服务器上看到发送的消息,是否被消费

Notion卡顿救星:3分钟搞定DNS优化,手机电脑全平台加速指南

本文针对Notion访问慢和卡顿问题,提供了全平台DNS优化与Hosts文件修改的详细指南。通过更换优质DNS服务器或建立静态IP映射,可有效解决因网络延迟和域名解析导致的加载缓慢,实现手机与电脑端的快速加速,提升Notion使用流畅度。

v6b7n8m9q0的博客 1306

RabbitMQ 点对点模式

RabbitMQ 点对点模式 queue

lantianlu3的博客 896

FFmpeg视频缩放终极指南:从基础命令到保持宽高比的5种实战技巧

本文是FFmpeg视频缩放的终极指南,详细讲解了从基础命令到保持宽高比的5种实战技巧。针对不同平台(如抖音、B站、Instagram)的分辨率要求,提供了具体的参数模板和批量处理脚本,帮助内容创作者高效、精准地调整视频大小,避免画面变形或黑边问题,实现多平台适配。

juice的博客 457

消息队列 - RabbitMQ

消息代理目的地当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。

rui28899的博客 441

基于线性光耦HCNR200的高压直流采样电路设计与精度优化

本文详细介绍了基于线性光耦HCNR200的高压直流采样电路设计与精度优化方法。针对直流高电压测量中的安全与干扰问题,提出采用HCNR200光耦隔离方案,实现高精度线性传输。文章深入解析电路设计关键细节,包括电阻网络、运放选型、滤波电容配置等,并提供精度优化实战技巧与常见问题排查指南,助力新能源电动汽车和高压储能系统的高压直流采样应用。

weixin_42713608的博客 579

RK3588芯片CAN总线调试秘籍:SocketCAN与错误帧攻略

RK3588芯片在嵌入式领域凭借8nm工艺和强大性能成为核心控制器。本文详细介绍了其CAN总线配置流程,包括硬件连接、内核驱动配置及SocketCAN命令操作,并深入解析了CAN通信中的错误帧机制及分析方法。通过智能工厂案例,展示了从问题定位到解决方案的全过程,强调了稳定通信对工业应用的重要性。文章为RK3588的CAN总线应用提供了实用技术参考,并对未来智能诊断技术在该领域的应用进行了展望。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 516

【C#】RabbitMQ入门指南(一)

文章目录1.简介2. 相关概念2.1 消息中间件2.2 消息中间件的作用2.3 RabbitMQ中的一些概念2.4 RabbitMQ模型3. 点对点3.1 轮询消费3.2 手动发送ACK与数据持久存储4.发布订阅4.1 交换机(Exchange)4.2 `fanout`交换机4.3 路由(Routing)4.3.1 `Direct`交换机4.4 主题(Topics)4.4.1 `Topic`交换机4.4.2 最终实现5. 远程过程调用(RPC)6. 发布确认(Publisher Confirms)6.1 发

catshitone的专栏 1万+

产品路线图的三种模型(RICE/MoSCoW/Kano),教你如何对需求进行优先级排序

RICE/MoSCoW/Kano三种模型,教你如何对需求进行优先级排序。 也许你会让业务提供一份ROI,记得前不久参加过一场立项会评审,一位很有意思的小产品在会上讲不清楚ROI,评审们要求会后重新梳理,小产品表达不要为难业务方干一些他们不擅长的事了。这个看似笑话的经历,背后隐藏着价值判断已经流于形式。 也许你会要求业务方直接给出需求优先级列表,把任务分为P0到P5,这样的划分除了按需求本质的优先级还同时考虑了开发资源、开发难度等问题。毫不夸张地说,我曾经拿到一张全是P0级别的需求清单,如果一切任务都是高

wenyusuran的专栏 5542

RabbitMQ中点对点(Point-to-Point)通讯方式的Java实现

通过以上步骤,我们成功地在RabbitMQ中实现了点对点通讯。消息生产者将消息发送到队列,而消息消费者从队列中接收消息。这种模式非常适合需要确保消息只被一个消费者处理一次的场景。

weixin_39033358的博客 1205

ESP32-C3模组上跑通HTTPS分次传输文件(1)

ESP32-C3模组上跑通HTTPS分次传输文件(1)

phmatthaus的专栏 760

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

从原理到实战,手把手教你在项目中使用RabbitMQ

消息队列目前主要 2 种模式,分别为“点对点模式”和“发布/订阅模式”。点对点模式一个具体的消息只能由一个消费者消费,多个生产者可以向同一个消息队列发送消息,但是一个消息在被一个消息者处理的时候,这个消息在队列上会被锁住或者被移除并且其他消费者无法处理该消息。需要额外注意的是,如果消费者处理一个消息失败了,消息系统一般会把这个消息放回队列,这样其他消费者可以继续处理。发布/订阅模式单个消息可以被多个订阅者并发的获取和处理。:这种订阅只有在消费者启动并且运行的时候才存在。

m0_60797416的博客 291

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

消息队列 RabbitMQ 的特征和原理

在现代分布式系统架构中,各个服务之间的通信方式至关重要。随着业务复杂度的增加,系统间的耦合度也随之提高,这给系统的可维护性和可扩展性带来了巨大挑战。消息队列作为一种异步通信方式,很好地解决了这些问题,它允许不同服务间松耦合地交换信息,提高了系统的可扩展性、容错性和峰值处理能力。本文将深入探讨 RabbitMQ 这一广受欢迎的开源消息队列系统,从其基本概念、核心工作原理到实际应用场景,帮助读者全面了解这一强大的中间件工具。

m0_74109105的博客 1122

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

RabbitMQ原理详解入门级

1、什么是RabbitMQ RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。 Rabbit科技有限公司开发了RabbitMQ,并提供对其的支持。 主要特点: 可伸缩性:集群服务。 消息持久化:从内存持久化消息到硬盘,再从硬盘加载到内存。 2、什么是消息队列 “消息队列”是在消息的传输过程中保存消息的容器。 消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间

weixin_39327556的博客 431

RabbitMQ入门

RabbitMQ是什么?   RabbitMQ 是消息中间件. 消息中间件是什么?   MQ(Message Queue Middleware), 消息队列中间件 是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,经常在分布式环境下用于进程间的通信。   消息队列中间件,也可以称为消息队列或者消息中间件。它一般有两种传递模...

leejiliang的博客 226

解锁RabbitMQ的秘密:消息队列为何如此强大?

【代码】解锁RabbitMQ的秘密:消息队列为何如此强大?

人生需要动态规划 学习需要贪心算法 1764

消息队列RabbitMQ

消息队列RabbitMQ的基本知识: 消息队列(Message Queue)消息: 网络中的两台计算机或者两个通讯设备之间传递的数据。例如说:文本、音乐、视频等内容。 队列:一种特殊的线性表(数据元素首尾相接),特殊之处在于只允许在首部删除元素和在尾部追加元素。入队、出队。 消息队列:顾名思义,消息+队列,保存消息的队列。消息的传输过程中...

菜鸟清风http://www.hphblog.cn/ 6163

腾讯一面:消息中间件工作原理和RabbitMQ有哪些

目前,主流的消息中间件主要有:ActiveMQ、Kafka、RabbitMQ、RocketMQ等等......,而我们今天的主角是:RabbitMQ,RabbitMQ是一个开元基于 erlang 语言开发具有高可用高并发的优点,适合集群消息代理和队列服务器,它是基于AMQP协议来实现的,AMQP的和主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全,RabbitMQ支持多种语言,有消息确认机制和持久化机制,保证数据不丢失的前提做到可靠性、可用性。消息(Message)是指应用于应用之间传

wdj_yyds的博客 438
上一篇: Eclipse
下一篇: abbitMQ整合Spring Booot【点对点模式】
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值