消息队列的使用

这篇具有很好参考价值的文章主要介绍了消息队列的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

消息队列

概念:

消息队列是System V IPC对象的一种

消息队列的使用

 

消息队列的使用:

发送端:

1 申请Key

2打开/创建消息队列   msgget

3向消息队列发送消息   msgsnd

接收端:

1打开/创建消息队列   msgget

2从消息队列接收消息   msgrcv

3 控制(删除)消息队列   msgctl

打开/创建消息队列

 #include <sys/ipc.h>

 #include <sys/msg.h>

 int msgget(key_t key, int msgflg);

  成功时返回消息队列的id,失败时返回EOF

  key 和消息队列关联的key  IPC_PRIVATE 或 ftok

  msgflg  标志位  IPC_CREAT|0666  IPC_CREAT:没有创建,有则打开。

发送消息

#include <sys/ipc.h>

 #include <sys/msg.h>

 int msgsnd(int msgid, const void *msgp, size_t size,

            int msgflg);

  成功时返回0,失败时返回-1

  msgid   消息队列id

  msgp    消息缓冲区地址

  size    消息正文长度

  msgflg   标志位 0 或 IPC_NOWAIT

msgflg:

0:当消息队列满时,msgsnd将会阻塞,直到消息能写进消息队列

IPC_NOWAIT:当消息队列已满的时候,msgsnd函数不等待立即返回

消息格式:

typedef struct{

long msg_type;

char buf[128];

}msgT;

注意:

1 消息结构必须有long类型的msg_type字段,表示消息的类型。

2消息长度不包括首类型 long

消息的接收:

#include <sys/ipc.h>

 #include <sys/msg.h>

 int msgrcv(int msgid, void *msgp, size_t size, long msgtype,

                   int msgflg);

  成功时返回收到的消息长度,失败时返回-1

  msgid   消息队列id

  msgp   消息缓冲区地址

  size   指定接收的消息长度

  msgtype   指定接收的消息类型  

  msgflg   标志位 

msgtype:

msgtype=0:收到的第一条消息,任意类型。

msgtype>0:收到的第一条 msg_type类型的消息。

msgtype<0:接收类型等于或者小于msgtype绝对值的第一个消息。

例子:如果msgtype=-4,只接受类型是1、2、3、4的消息

msgflg:

0:阻塞式接收消息

IPC_NOWAIT:如果没有返回条件的消息调用立即返回,此时错误码为ENOMSG

MSG_EXCEPT:与msgtype配合使用返回队列中第一个类型不为msgtype的消息

消息队列的控制

#include <sys/ipc.h>

 #include <sys/msg.h>

 int msgctl(int msgid, int cmd, struct msqid_ds *buf);

  成功时返回0,失败时返回-1

  msgid    消息队列id

  cmd    要执行的操作  IPC_STAT / IPC_SET / IPC_RMID(删除)

  buf   存放消息队列属性的地址文章来源地址https://www.toymoban.com/news/detail-468450.html

到了这里,关于消息队列的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分布式消息队列RocketMQ概念详解

    目录 1.MQ概述 1.1 RocketMQ简介 1.2 MQ用途 1.3 常见MQ产品 2.RocketMQ 基本概念 2.1 消息 2.2 主题 2.3 标签 2.4 队列  2.5 Producer 2.6 Consumer 2.7 NameServer 2.8 Broker 2.9 RocketMQ 工作流程   RocketMQ 是阿里开源的分布式消息中间件,跟其它中间件相比,RocketMQ 的特点是纯JAVA实现,是一套提供了消息

    2024年02月03日
    浏览(65)
  • 消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序

    目录 基本概念  MQ 的优势  1.应用解耦  2.异步提速  3.削峰填谷  MQ 的劣势 使用mq的条件  常见MQ产品  RabbitMQ简介 RabbitMQ的六种工作模式   JMS RabbitMQ安装和配置。 RabbitMQ控制台使用。 RabbitMQ快速入门——生产者 需求: RabbitMQ快速入门——消费者 小结  多个系统之间的通信方

    2024年02月16日
    浏览(46)
  • Kafka系列(一)【消息队列、Kafka的基本概念、Kafka的工作机制、Kafka可满足的需求、Kafka的特性、Kafka的应用场景】

    转自《Kafka并不难学!入门、进阶、商业实战》 1. 消息队列的来源 在高并发的应用场景中, 由于来不及同步处理请求,接收到的请求往往会发生阻塞。 例如,大量的插入、更新请求同时到达数据库,这会导致行或表被锁住,最后会因为请求堆积过多而触发“连接数过多的异

    2024年02月20日
    浏览(35)
  • RabbitMQ实现延迟消息,RabbitMQ使用死信队列实现延迟消息,RabbitMQ延时队列插件

    假设有一个业务场景:超过30分钟未付款的订单自动关闭,这个功能应该怎么实现? RabbitMQ使用死信队列,可以实现消息的延迟接收。 队列有一个消息过期属性。就像丰巢超过24小时就收费一样,通过设置这个属性,超过了指定事件的消息将会被丢弃。 这个属性交:x-message

    2024年02月13日
    浏览(79)
  • RabbitMQ-网页使用消息队列

    几种模式 从最简单的开始 添加完新的虚拟机可以看到,当前admin用户的主机访问权限中新增的刚添加的环境 1.1查看交换机 交换机列表中自动新增了刚创建好的虚拟主机相关的预设交换机。一共7个。前面两个 direct类型的交换机,一个是(AMQP default)还有一个是amq.direct,它们

    2024年02月07日
    浏览(42)
  • RabbitMQ 消息队列使用

    同步调用优点: 时效性强,立即得到结果 缺点: 耦合度高 新业务新需求到来时,需要修改代码 性能和吞吐能力下降 调用服务的响应时间为所有服务的时间之和 资源浪费 调用链中的服务在等待时不会释放请求占用的资源 级联失败 一个服务执行失败会导致调用链后续所有服务失

    2024年01月21日
    浏览(48)
  • 消息队列的使用

    概念: 消息队列是System V IPC对象的一种   发送端: 1 申请Key 2打开/创建消息队列   msgget 3向消息队列发送消息   msgsnd 接收端: 1打开/创建消息队列   msgget 2从消息队列接收消息   msgrcv 3 控制(删除)消息队列   msgctl 打开/ 创建消息队列  #include sys/ipc.h  #include sys/msg

    2024年02月07日
    浏览(21)
  • Golang使用消息队列(RabbitMQ)

    最近在使用Golang做了一个网盘项目(类似百度网盘),这个网盘项目有一个功能描述如下:用户会删除一个文件到垃圾回收站,回收站的文件有一个时间期限,比如24h,24h后数据库中记录和oss中文件会被删除,在之前的版本中,可以使用定时任务来检查数据库记录中删除时间

    2024年02月10日
    浏览(54)
  • 消息队列RabbitMQ.01.基本使用

    目录  RabbitMQ的作用 Message queue 释义  问题思考  存在的问题 优化方案  案例分析  带来的好处  消息队列特点  Email邮件案例分析 Docker安装部署RabbitMQ 1.下拉镜像 2.运行RabbitMQ  3.打开防火墙端口号并重新运行防火墙 4.容器启动后,可以通过 docker logs 容器 查看日志 6.通过刚才

    2024年01月21日
    浏览(42)
  • Hyperf使用RabbitMQ消息队列

    Hyperf连接使用RabbitMQ消息中间件 使用Docker部署RabbitMQ,-传送门 使用Docker部署Hyperf,-传送门- 安装amqp扩展 安装command命令行扩展 配置参数 假设已经在rabbitmq设置了交换机exchange_test和队列queue_test 新建 /config/autoload/amp.php配置文件,修改地址和用户名密码 创建生产者中间件 exch

    2024年02月13日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包