经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
Rabbitmq基本使用
来源:cnblogs  作者:撸码识途  时间:2018/11/19 9:28:25  对本文有异议

基本概念

channel:消息通道
exchage:消息路由规则,四种模式(topic、direct、fanout、header)

  1. direct:默认,根据routingKey完全匹配,好处是先匹配再发送
  2. topic:根据绑定关键字通配符规则匹配、比较灵活
  3. fanout:不需要指定routingkey,相当于群发
  4. header:不太常用,可以自定义匹配规则

queue:消息存储
routerKey:消息路由关键字(发送的时候成为bindingkey,接收成为routingKey)


队列的概念(生产者消费者启动报错大多数都是这几个不匹配导致)
durable:持久化到硬盘
exclusive:唯一性
autoDelete:自动删除

  1. /**
  2. * 第二个参数:queue的持久化是通过durable=true来实现的。
  3. * 第三个参数:exclusive:排他队列,如果一个队列被声明为排他队列,该队列仅对首次申明它的连接可见,并在连接断开时自动删除。这里需要注意三点:
    1. 排他队列是基于连接可见的,同一连接的不同信道是可以同时访问同一连接创建的排他队列;
        2.“首次”,如果一个连接已经声明了一个排他队列,其他连接是不允许建立同名的排他队列的,这个与普通队列不同;
    3.即使该队列是持久化的,一旦连接关闭或者客户端退出,该排他队列都会被自动删除的,这种队列适用于一个客户端发送读取消息的应用场景。
  4. * 第四个参数:自动删除,如果该队列没有任何订阅的消费者的话,该队列会被自动删除。这种队列适用于临时队列。
  5. * @param
  6. * @return
  7. * @Author zxj
  8. */
  9. @Bean
  10. public Queue queue() {
  11. Map<String, Object> arguments = new HashMap<>();
  12. arguments.put("x-message-ttl", 25000);//25秒自动删除
  13. Queue queue = new Queue("topic.messages", true, false, true, arguments);
  14. return queue;
  15. }

 

  1. @Configuration
  2. public class RabbitConfig {
  3. // 发送消息的格式转换器
  4. @Bean
  5. public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
  6. RabbitTemplate template = new RabbitTemplate(connectionFactory);
  7. template.setMessageConverter(new Jackson2JsonMessageConverter());
  8. return template;
  9. }
  10. // 接收消息的格式转换器
  11. @Bean
  12. public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
  13. SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
  14. factory.setConnectionFactory(connectionFactory);
  15. factory.setMessageConverter(new Jackson2JsonMessageConverter());
  16. return factory;
  17. }
  18. // 信道配置,此地使用direct模式
  19. @Bean
  20. public DirectExchange defaultExchange() {
  21. return new DirectExchange(MQConstant.EXCHANGE, true, false);
  22. }
  23. // 配置队列规则属性 例如保活时间 持久化 是否自动删除等
  24. @Bean
  25. public Queue queue() {
  26. Map<String, Object> arguments = new HashMap<>();
  27. arguments.put("x-message-ttl", 25000);//25秒自动删除
  28. Queue queue = new Queue(MQConstant.QUEUE_NAME, true, false, true, arguments);
  29. return queue;
  30. }
  31. // 绑定队列和exchange
  32. @Bean
  33. public Binding binding() {
  34. return BindingBuilder.bind(queue()).to(defaultExchange()).with(MQConstant.QUEUE_NAME);
  35. }
  36. }
  37. 如何发送
  38. @Autowired
  39. private RabbitTemplate template;
  40. //convertAndSend和send的区别是这个convert更方便使用,可以传object进去
  41. template.convertAndSend(MQConstant.EXCHANGE, bindingKey, msg);
  42. //如何接收,注意队列名称、exchange名称、routingKey的指定。
  43. //注意:队列的消息只要被一个消费者匹配消费后就不存在了
  44. @Component
  45. @RabbitListener(containerFactory = "rabbitListenerContainerFactory", bindings = @QueueBinding(value = @Queue(value = "default_queue", durable = "true"), exchange = @Exchange(value = "default_exchange", type = ExchangeTypes.TOPIC), key = "meeting"))
  46. @Log4j
  47. public class RabbitMqListener {
  48. @RabbitHandler
  49. public void processMessage(MqMsg message) {
  50. log.error( message);
  51. }
  52. }

 

 

Rabbitmq常用配置

  1. spring.rabbitmq.addresses指定client连接到的server的地址,多个以逗号分隔.
  2. spring.rabbitmq.dynamic是否创建AmqpAdmin bean. 默认为: true)
  3. spring.rabbitmq.host指定RabbitMQ host.默认为: localhost)
  4. spring.rabbitmq.listener.acknowledge-mode指定Acknowledge的模式.
  5. spring.rabbitmq.listener.auto-startup是否在启动时就启动mq,默认: true)
  6. spring.rabbitmq.listener.concurrency指定最小的消费者数量.
  7. spring.rabbitmq.listener.max-concurrency指定最大的消费者数量.
  8. spring.rabbitmq.listener.prefetch指定一个请求能处理多少个消息,如果有事务的话,必须大于等于transaction数量.
  9. spring.rabbitmq.listener.transaction-size指定一个事务处理的消息数量,最好是小于等于prefetch的数量.
  10. spring.rabbitmq.password指定broker的密码.
  11. spring.rabbitmq.port指定RabbitMQ 的端口,默认: 5672)
  12. spring.rabbitmq.requested-heartbeat指定心跳超时,0为不指定.
  13. spring.rabbitmq.ssl.enabled是否开始SSL,默认: false)
  14. spring.rabbitmq.ssl.key-store指定持有SSL certificatekey store的路径
  15. spring.rabbitmq.ssl.key-store-password指定访问key store的密码.
  16. spring.rabbitmq.ssl.trust-store指定持有SSL certificatesTrust store.
  17. spring.rabbitmq.ssl.trust-store-password指定访问trust store的密码.
  18. spring.rabbitmq.username指定登陆broker的用户名.
  19. spring.rabbitmq.virtual-host指定连接到brokerVirtual host.
  20. spring.rabbitmq.publisher-confirms=true 开启发送确认
  21. spring.rabbitmq.publisher-returns=true 开启发送失败退回

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号