RabbitMQ 使用

一、常用方法说明
生产者:
1、创建连接:

/**
 * 参数说明
 * $host : RabbitMQ 服务器主机IP地址
 * $post : RabbitMQ服务器端口
 * $user : RabbitMQ服务器的用户名
 * $password : RabbitMQ服务器的密码
 * $vhost : 连接rabbitmq服务器的vhost(虚拟主机)
 */
$connection = new AMQPStreamConnection($host,$port,$user,$password,$vhost);

2、获取信道

/*
 *$channel_id 信道ID,不传则获取$channel[“”]信道,再无则循  环$this->channle数组,下标从1到最大信道数找第一个不是AMQPChannel对象的下标,实例化并返回AMQPChannel对象,无则抛出异常No free channel ids
 */
$channel = $connection->channel($channel_id);

3、在信道创建交换机

/**
 * $exchange_name 交换机名字
 * $type 交换机类型:
 *       直连交换机:Direct
 *       扇形交换机:Fanout 
 *       主题交换机:Topic 
 *       首部交换机:Headers 
 * $passive  检测exchange是否存在,设为true,若队列存在则命令成功返回(调用其他参数不会影响exchange属性),若不存在不会创建exchange,返回错误。设为false,如果exchange不存在则创建exchange,调用成功返回。如果exchange已经存在,并且匹配现在exchange的话则成功返回,如果不匹配则exchange声明失败
 * $durable 是否持久化
 * $auto_delete 连接断开的时候,exchange是否自动删除
 */
 $channel->exchange_declare($exchange_name,$type,$passive,$durable,$auto_delete);

交换机类型说明:
3.1、扇形交换机:
扇形交换机是最基本的交换机类型,它所能做的事情非常简单———广播消息。扇形交换机会把能接收到的消息全部发送给绑定在自己身上的队列。因为广播不需要“思考”,所以扇形交换机处理消息的速度也是所有的交换机类型里面最快的。
3.2、直连交换机:
直连交换机是一种带路由功能的交换机,一个队列会和一个交换机绑定,除此之外再绑定一个routing_key,当消息被发送的时候,需要指定一个binding_key,这个消息被送达交换机的时候,就会被这个交换机送到指定的队列里面去。同样的一个binding_key也是支持应用到多个队列中的。这样当一个交换机绑定多个队列,就会被送到对应的队列去处理。适用场景:有优先级的任务,根据任务的优先级把消息发送到对应的队列,这样可以指派更多的资源去处理高优先级的队列。
3.3、主题交换机:
发送到主题交换机上的消息需要携带指定规则的routing_key,主题交换机会根据这个规则将数据发送到对应的(多个)队列上。主题交换机的routing_key需要有一定的规则,交换机和队列的binding_key需要采用 .#.… 的格式,每个部分用 . 分开,其中:

  • *表示一个单词
  • #表示任意数量(零个或多个)单词

4、声明队列:

/*
 * $queuename  队列名称
 * $passive   检查queue是否存在
 * $durable 是否开启队列持久化
 * $exclusive 队列是否可悲其他队列访问
 * $auto_delete 通道关闭后,是否自动删除队列 
 */
$channel->queue_declare($queuename,$passive,$durable,$exclusive,$auto_delete);

5、绑定交换机:

/*
 * $queuename 队列名称
 * $exchangename 交换机名称
 * $binding_key 默认为空,表示该交换机对所有消息感兴趣
 */
$channel->queue_bind($queuename,$exchangename,$binding_key);

6、创建要发送的消息:

/*
 * $data string类型,要发送的消息
 * $properties  array类型 设置的属性,比如消息持久化['delivery_mode'=>2]
 */
$msg = new AMQPMessage($data,$properties);

7、创建要发送的消息:

/*
 * $msg 要发送的消息
 * $exchange 交换机名称
 * $routing_key 路由键
 */
$channel->basic_publish($msg,$exchange,$routing_key);

8、关闭信道和连接

$channel->close();
$connection->close();

消费者:
1、消费消息:

/*
 * $aueue  队列名称
 * $consumer_tag 消费者标签,用来区别多个消费者
 * $no_local 设置为true,表示不能将同一个connection中生产者发送的消息传递给这个connection中的消费者
 * $no_ack 是否自动确认消息,收到消息后,是否不需要回复确认即被认为被消费
 * $exclusive 是否排它,即这个队列只能由一个消费者消费.适用于任务不允许进行并发处理的情况下
 * $nowait 不返回执行结果,但是如果排他开启的话,则必须需要等待结果的,如果两个一起开就会报错 
 */
$channel->basic_consume( $queue = '',$consumer_tag = '',$no_local = false,$no_ack = false,$exclusive = false,$nowait = false,$callback = null,);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ是一个使用Erlang实现的高并发高可靠AMQP消息队列服务器。它支持消息的持久化、事务、拥塞控制、负载均衡等特性,使得RabbitMQ在各种应用场景下被广泛使用RabbitMQ与Erlang和AMQP密切相关。 Erlang是一种编程语言,它特别适合构建高并发、分布式、实时的系统。RabbitMQ使用Erlang作为其底层开发语言,这使得它能够充分利用Erlang在并发处理和容错性方面的优势。 AMQP(Advanced Message Queuing Protocol)是一个开放标准的消息队列协议,用于在应用程序之间进行可靠的消息传递。RabbitMQ实现了AMQP协议,这意味着它可以与其他遵循AMQP协议的应用程序进行通信,实现可靠的消息传递机制。 要使用RabbitMQ,可以通过Docker安装,使用以下命令运行一个带有管理界面的RabbitMQ容器: ``` docker run -itd --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management ``` 在编写RabbitMQ程序时,可以利用其支持的多种消息模型,例如发布-订阅模型、工作队列模型、路由模型等,根据具体需求选择合适的模型来实现消息传递。 在配置RabbitMQ环境时,可以设置RABBITMQ_SERVER环境变量,并将RabbitMQ的安装路径添加到系统的path变量中,以方便在命令行中直接使用RabbitMQ命令。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [RabbitMQ使用详解](https://blog.csdn.net/qq_43410878/article/details/123656765)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值