首页 > 其他分享 >rabbitmq 使用

rabbitmq 使用

时间:2023-05-05 17:36:00浏览次数:44  
标签:pika 队列 rabbitmq admin 消息 使用 channel

今日内容

1 消息队列Rabbitmq介绍

---------------------------------------------

# 消息队列
    也叫消息队列中间件
    celery中使用redis做过消息队列来用
    换Rabbitmq做消息队列,就只需要把broker的连接地址换成Rabbitmq的连接地址就行了
---------------------------------------------

#  消息队列 MessageQueue  也叫MQ
    消息队列就是基础数据结构中的“先进先出”的一种数据结构。
    生活中买东西,需要排队,先排的人先买消费,就是典型的“先进先出”

---------------------------------------------

# MQ解决什么问题
    最主要就是: 应用解耦(微服务中,服务间数据的传递)
    流量削峰
    消息分发(发布订阅)
    异步
    IPC 进程间通信也可以通过消息队列

image
.
image
.
.
常见消息队列比较
image
.
.
.
.
.
.
.

2 rabbitmq安装


rabbitmq官网  https://www.rabbitmq.com/
----------------------------------------------

# windows安装地址 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
# 默认用户名是admin 密码是admin,做了两个端口映射,
# 一个端口是连接服务的端口5672
# 另一个是web管理界面的端口15672


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

windows安装erlang解释器
image
image
image
.
windows安装rabbitmq
image
image
.
.
用容器运行rabbitmq后,访问虚拟机的15672端口http://10.0.0.200:15672/ 就能登录了
重点就3个 channels信道 exchanges交换机 queues队列
image
.
.
看官网的7个案例,学习如何使用
image
image
image
.
.
.
.
.

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 发送基本的 hello world


# 生产者
import pika

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

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

# 第二步:连接channel信道
channel = connection.channel()

# 第三步:信道中创建一个队列,名字叫hello,也可以在图形化界面手动创建队列
channel.queue_declare(queue='hello')

# 第四步: 向hello队列中,发送Hello World
# routing_key是队列名字       body是发送的内容
channel.basic_publish(exchange='', routing_key='hello', body='Hello World !')
print("  Sent 'Hello World!'")
connection.close()

--------------------------------------------------

# 消费者
import pika


# 连接rabbitmq
credentials = pika.PlainCredentials("admin", "admin")
connection = pika.BlockingConnection(pika.ConnectionParameters('10.0.0.200', 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()  # 程序会夯在这里,等待从消息队列中取消息

# auto_ack=True  表示消费者从队列里拿出数据后,默认没有异常,就把数据删掉
# 如果回调函数运行过程中报错,队列里数据也没了,所以一般把自动确认设为False
# 在回到函数的最后,所有逻辑的处理完了,再确认队列里该数据可以删掉!!!

--------------------------------------------------

# 生产者每产生一个消息,都会放到队列里面
# 消费者会从队列里一个一个的取出消息来

image
.
.
.
.
.
.

5 消息安全


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



.
.
.
.

6 持久化(详见笔记)


# queue和消息都要持久化

.
.
.
.

7 闲置消费(详见笔记)


# 正常情况如果有多个消费者,是按照顺序第一个消息给第一个消费者,第二个消息给第二个消费者

# 但是可能第一个消息的消费者处理消息很耗时,一直没结束,就可以让第二个消费者优先获得闲置的消息

.
.
.
.
.

8 发布订阅(详见笔记)


.
.
.
.
.

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


.
.
.

标签:pika,队列,rabbitmq,admin,消息,使用,channel
From: https://www.cnblogs.com/tengyifan888/p/17374827.html

相关文章

  • mysql8.0 使用navicat报caching_sha2_password' cannot be loaded解决方法
    安装8.0版本的mysql后,使用navicat连接时,报caching_sha2_password'cannotbeloaded的异常。原因为:8.0版本的mysq用户密码加密方式为caching_sha2_password,navicat暂不支持,需要修改下mysql的加密方式。解决过程:#(不建议用root进行连接)#1.登陆mysqlmysql-uroot-p#2.查看......
  • Prometheus-Operator使用ServiceMonitor监控配置时遇坑与解决总结
    摘要本文范围:Prometheus-Operator&kube-prometheus安装;以及在解决使用ServiceMonitor时遇到的坑。PrometheusOperator简介随着云原生概念盛行,对于容器、服务、节点以及集群的监控变得越来越重要。Prometheus作为Kubernetes监控的事实标准,有着强大的功能和良好的生态......
  • C# 使用AForge调用笔记本摄像头拍照及录像
    1、添加引用1、官网下载链接:http://www.aforgenet.com/framework/downloads.html2、通过管理Nuget程序包可直接添加以下引用,当然这里并没有全部用上,而只是用上了一部分在添加完这些引用之后VS的工具箱当中会多出AForge.NET相关的一些控件,而实现调用摄像头就需要使用到这些控件......
  • C# WinForm使用Socket通信搭建简易聊天室
    1、创建WinForm应用程序 主入口两个按钮事件:///<summary>///打开客户端///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidbtn_OpenClient_Click(object......
  • 如何使用brew(Homebrew)
    #brew安装,如果安装速度慢或者被墙,可自行网上找镜像链接安装/bin/bash-c"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install.sh)"#常用命令brew-v#查看brew版本号brewinstallxxx#安装包brewsearchxxx#搜索包brewinfoxxx#......
  • pg中使用游标进行base64解码
    1. DO$$DECLARErec_compvalueRECORD;cur_compvalueCURSORFORSELECT*fromt_compvaluewherecompvalue_nocomplike'Wyk%';BEGIN--OpenthecursorOPENcur_compvalue;LOOP--fetchrowinto......
  • Oracle使用Impdp导入dmp文件的详细过程
    这一天为了导入这个Oracle的dmp文件,简直就是血泪史,因本人对Oracle并不是很会,随意踩了很多小白会踩的坑,因此特意记录一下过程,防备下次的使用。1、首先将你需要的dmp文件准备好,将其放在Oracle安装目录的任意位置,但是如果你想按照我的步骤来,就和我安装到相同的目录,否则会和第五步的......
  • 使用require.context实现优雅的预加载
    前言在前端开发中,对页面花里胡哨度[注1]要求越高的页面,用到的图片、音频什么的就越多,比如什么结婚请柬、展会请柬、发布会宣传页、数据大屏。虽然现在浏览器不允许网页在没有用户交互的情况下播放音频,但是,我们依旧要在页面展现的同时,准备好所有的静态资源。注1:花里胡哨度(garish......
  • C# 细数AForge.Video.FFMPEG使用过程中踩的坑及解决方案
    细数AForge.Video.FFMPEG使用过程中踩的坑及解决方案在后台代码中只要有引用到AForge.Video.FFMPEG都不用等到具体调用,只要运行直接就报错解决方案:发生这个问题的原因比较简单,因为AForge.Video.FFMPEG使用VC++写的,编译的时候已经被编译成本地代码,而C#一般目标平台都是“AnyCP......
  • 【解决】mysql本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用
    在计算机管理中启动时,发现mysql报错:mysql本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。该问题的解决方式为:1找到Mysql的安装路径,看看有没有data文件夹,如果没有data文件夹,自己重新建一个;如果有的话,就把里面的内容全部清空,但保留该目录......