首页 > 其他分享 >rabbitMQ

rabbitMQ

时间:2023-08-19 18:12:39浏览次数:31  
标签:pika 队列 rabbitmq queue rabbitMQ channel 消息

目录

1 消息队列Rabbitmq介绍

# 消息队列
	-中间件---(概念很大)---》准确一些叫消息队列中间件
    -消息队列中间件
    
    -使用redis当做消息队列来用
    	-blpop 阻塞式弹出,实现队列,先进先出
        
        
# MQ ,消息队列,MessageQueue 是什么
	消息队列就是基础数据结构中的“先进先出”的一种数据机构。想一下,生活中买东西,需要排队,先排的人先买消费,就是典型的“先进先出”
    
# MQ解决什么问题
	-应用解耦
    -流量削峰
    -消息分发(发布订阅)
    -异步消息
    -IPC 进程间通信也可以通过消息队列
    
    
 # 

2 rabbitmq安装

# win:https://www.rabbitmq.com/install-windows-manual.html
	-erlang解释器
    -rabbitmq的软件

# centos
yum -y install erlang
yum -y install rabbitmq-server

# docker安装
docker pull rabbitmq:management
docker run -di --name Myrabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management

# 访问虚拟机的15672端口,就可以看到图形化界面(官方提供的),手动点点点操作
http://10.0.0.101:15672/#/

3 基于queue实现生产者消费者

import Queue
import threading

message = Queue.Queue(10)

def producer(i):
    while True:
        message.put(i)

def consumer(i):
    while True:
        msg = message.get()

for i in range(12):
    t = threading.Thread(target=producer, args=(i,))
    t.start()

for i in range(10):
    t = threading.Thread(target=consumer, args=(i,))
    t.start()

4 基本使用

4.1 发送者

import pika

###第一步,连接
# 无密码
# connection = pika.BlockingConnection(pika.ConnectionParameters(host='10.0.0.101',port=5672))

# 有密码
credentials = pika.PlainCredentials("admin","admin")
connection = pika.BlockingConnection(pika.ConnectionParameters('10.0.0.101',credentials=credentials))

# 第二步:连接channal
channel = connection.channel()
# 第三步:创建一个队列,名字叫hello
channel.queue_declare(queue='hello')
# 第三步:向hello队列中,发送Hello World
# routing_key 队列名字
#body 发送的Neri
channel.basic_publish(exchange='', routing_key='hello', body='Hello World4441!')
print("  Sent 'Hello World!'")
connection.close()

4.2 消费者

import pika


# 连接rabbitmq
credentials = pika.PlainCredentials("admin", "admin")
connection = pika.BlockingConnection(pika.ConnectionParameters('10.0.0.101', credentials=credentials))
#假设队列不存在,创建
channel = connection.channel()
channel.queue_declare(queue='hello')


# 回调函数
def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)


channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()  # 程序会夯在这里,等待从消息队列中取消息

5 消息安全(详见笔记)

# 消费完,确认后,再删除消息

6 持久化(详见笔记)

# queue和消息都要持久化

7 闲置消费(详见笔记)

# 正常情况如果有多个消费者,是按照顺序第一个消息给第一个消费者,第二个消息给第二个消费者
# 但是可能第一个消息的消费者处理消息很耗时,一直没结束,就可以让第二个消费者优先获得闲置的消息

8 发布订阅(详见笔记)

9 发布订阅高级之Routing(按关键字匹配)(详见笔记)

标签:pika,队列,rabbitmq,queue,rabbitMQ,channel,消息
From: https://www.cnblogs.com/yuezongke/p/17642827.html

相关文章

  • rabbitmq中是否支持事务
    是的,RabbitMQ支持事务。在RabbitMQ中,事务是一组操作的原子性操作。可以使用channel.txSelect()方法开始一个事务,并使用channel.txCommit()方法提交事务,或使用channel.txRollback()方法回滚事务。事务可以确保一组操作要么全部成功执行,要么全部回滚。但是需要注意,使用事务会降低Rabb......
  • RabbitMQ与SpringBoot 集成
    1、添加依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency> 2、添加配置官方配置https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/h......
  • RabbitMQ安装(erlang 与 rabbitmq 版本要对应)
    参考文献版本对照表https://www.rabbitmq.com/which-erlang.html 安装过程中遇到问题相关博客http://blog.csdn.net/qq315737546/article/details/53105418http://blog.csdn.net/leekwen/article/details/23333659如有侵权,请联系删除启动前台运行:rabbitmq-server......
  • RabbitMQ入门
    1简介​ RabbitMQ是采用erlang语言实现AMQP(AdvancedMessageQueuingProtocol,高级消息队列协议)的消息中间件,它最初起源于金融系统,用于在分布式系统中存储转发消息。​ RabbitMQ是目前非常热门的一款消息中间件,不管是互联网行业还是传统行业都在大量地使用RabbitMQ......
  • RabbitMq的死信队列
    参考博客:https://blog.csdn.net/weixin_59074080/article/details/130673121https://blog.csdn.net/m0_46979453/article/details/127229005https://zhuanlan.zhihu.com/p/582787597?utm_id=0什么是死信队列正常情况下,一条消息自生产者发布到broke,然后转发到队列中,最后被订阅......
  • RabbitMQ如何保证顺序消费
    面试官:你能说说RabbitMQ是如何保证消息顺序消费的吗?老任:如果我们想要保证消息是按照顺序进行发送的,发送到队列后,队列的消息应该是先进先出的,我们只需要一个队列配置一个消费者即可(窃喜中......)。面试官:我们的项目一般都是集群部署的,一个队列就会有多个消费者,怎么实现一个队列中所......
  • 《高级程序员 面试攻略 》RabbitMQ 如何实现可靠性
    RabbitMQ提供了多种机制来实现消息传递的可靠性。下面是一些常见的方法:1.持久化消息:RabbitMQ允许将消息标记为持久化,以确保即使在发生故障或重启后,消息也不会丢失。通过将消息的`deliverymode`设置为2,可以将消息标记为持久化消息。1.持久化队列:创建持久化队列可以确保即使......
  • Windows10下安装docker 并启动 rabbitmq
    1.官网下载docker:https://hub.docker.com/editions/community/docker-ce-desktop-windows 2.安装docker:运行下载好的DockerforWindowsInstaller.exe 3.安装好后启动docker: 4.修改成国内镜像仓库:https://q3a36twa.mirror.aliyuncs.com  5.拉取rabbitmq,在cmd窗......
  • rabbitMQ初识
    消息队列-RabbitMQ认识MQ同步和异步通讯微服务间通讯有同步和异步两种方式:同步通讯:就像打电话,需要实时响应。异步通讯:就像发邮件,不需要马上回复。同步通讯同步调用的优点:时效性较强,可以立即得到结果同步调用的问题:耦合度高性能和吞吐能力下降有额外的资源消耗有级......
  • RabbitMq应用示例(RabbitMq第三篇)
    一、应用示例:参考文献:(写的很好的一篇文章,小编已经参照该博主的内容完整的编写了一遍,可能会有一些遐思,后续会把自己编写的代码也补充一下)Springboot整合RabbitMq,用心看完这一篇就够了_springbootrabbitmq_小目标青年的博客-CSDN博客简单的消息推送流程图:黄色的圈圈就是我们的消息......