首页 > 代码库 > rabbitmq vhost
rabbitmq vhost
一个队列不受任何限制,它可以存储你想要存储的消息量,它本质上是一个无限缓冲区。多个生产者可以向同一个队列发关消息,多个消费者可以尝试从同一个消息队列中接收数据。 注意:生产者 消费者 中间件不必在一台机器上,实现应用中也是绝大多数不在一起的。 生产者: 首先,创建一个connection通过socket连接,去和服务器连接起来(需要传目 地服务器的ip,用户名,密码等)。接着创建一个channel。要发送消息,我们必须声明,然后我们可以向队列发布消息。注意:声明的队列,在服务器中如果不存在了,会自动创建。而消息的内容是字节数组,在使用时,注意编码问题。 消息队列的使用过程大概如下: 1:客户端连接到消息队列服务器,打开一个channel 2:客户端声明一个exchange,并设置相关属性 3:客户端声明一个queue,并设置相关属性 4:客户端使用routing key,在exchange和queue之间建立好绑定关系 5:客户端投递消息到exchange 消息中间件的主要功能是消息的路(Routing)和缓存(Buffering).在AMQP中提 供类类似功能的两种域查模型:Exchange和Message queue Exchange接收消息生产生(Message Producer)发送的消息根据不同的路由算法将消息发送到Message queue。Message queue会在消息不能被正常消费时缓存这些消息,具体的缓存策略由实现者决定,当message queue与消息消费者(Message consumer)之间的连接通畅时,Message queue有将消息转发到consumer的责任。
在与多个Message queue关联后,Exchange中就会存在一个路由表,这个表中存储着每个Message queue所需要消息的限制条件。Exchange就会检查它接受到的每个Message的Header及Body信息,业决定将Message路由到哪个queue中去。Message的Header中应该有个属性叫Routing Key,它由Message发送者产生,提供给Exchange路由这个Message的标准。Exchange根据不同路算法不同有Exchange Type.比如有Dirct类似,需要Binding key等于Routing key;也有Binding key与Routing key符合一个模式关系;也有根据Message包含 的某些属性来判断。一些基础的路由算法由AMQP所提供,client application也可以自定义各种自己的扩展路由算法。
vhost虚拟主机:一个broker里可以开设多个vhost,用作不同用户的权限分离。
channele消息通道:在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
消息生产者如何确认消息发布成功呢?
默认情况下,当用户也即消息生产者将消息发布出去后,会发生什么事情思?答案是什么也不会发生--对用户来说。这也就是说,消息发布后,就没有消息生产者什么事了,用户就不知道消息是发布成功了还是失败了。如果用户想知道发送消息是否成功,就可以用"transations"和"publisher confirems"这两种方式来处理消息发送。transations,也就是事务,提交后会给发布者返回发布是否成功的信息。publisher confirms和transations都 会接收到消息是否发布成功的信息,两者不同的是,transations是同步的,而publisher confirms方式是异步的。
rabbitmq vhost