1.rabbitMQ是什么?
mq是由erlang语言开发的开源的amqp的实现。
2.rabbitMQ的基本原理是什么?
使用RabbitMQ,首先需要与rabbitMQ的visiu host建立连接,visiu host使用exchange和quence组成,当客户端与visiu host建立连接后,还不能发送命令,
需要创建信道channel,然后通过channel来发送命令command和消息,到了visiu host,exchange和quence之间是通过binding形成绑定的,从而形成一个路由表,
然后通过路由表发送给不同的quence。
3.rabbitMQ的集中使用模式?
一种有6种;分别是:简单模式,工厂模式,发布订阅模式,路由模式,topics路由模式,rpc模式
简单模式:一个生产者,一个消费者,一个消息队列(没有exchange概念)
工厂模式:一个生产者,多个消费者,一个消息队列(没有exchange概念)
exchange的三种类型:fanout,direct,topics
发布订阅模式:一个生产者,多个消费者,一个exchange 类型fanout{广播类型},多个队列;
路由模式:一个生产者,多个消费者,一个exchange 类型direct{定向类型},多个队列;
主题模式:一个生产者,多个消费者,一个exchange类型topic{通配符匹配类型},多个队列;
4.实际项目中使用mq
<description>rabbitmq 连接服务配置</description>
<!--链接工厂配置,mq地址,mq用户名,mq密码,虚拟主机-->
<rabbit:connection-factory id="connectionFactory" addresses="${mq.address}" username="${mq.username}" password="${mq.password}" virtual-host="/"/>
<!--管理员 <rabbit:admin connection-factory="connectionFactory"/>
<!-- mq模板声明,message-converter意思是可以将object类型转化成json传输,也可以将json类型转成object-->
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" message-converter="jsonMessageConverter" />
<!-- 使用jsckson执行消息转化 -->
<bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" />
<!--定义exchange的类型,绑定键和queue,是否自动删除-->
<rabbit:direct-exchange name="${exchange_name}" auto-delete="false">
<rabbit:bindings>
<rabbit:binding key="${routing_key}" queue="${queue_name}"/>
</rabbit:bindings>
</rabbit:direct-exchange>
<!-- 定义queue-->
<!--<rabbit:queue id="queue_id" name="${queue_name}" auto-delete="false" durable="true"/>-->
<!-- 配置queue的监听 -->
<rabbit:listener-container connection-factory="connectionFactory">
<rabbit:listener ref="listen_class" queues="${queue_name}"/>
</rabbit:listener-container>
</beans>
生产者:amqpTemplate.convertAndSend(exchange, roteKey, message);
消费者:
public class SelfListener implements MessageListener {
@Override
public void onMessage(Message message) {}
}