RabbitConfig.java 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package com.miyzh.config;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import org.springframework.amqp.core.*;
  5. import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
  6. import org.springframework.amqp.rabbit.connection.ConnectionFactory;
  7. import org.springframework.amqp.rabbit.core.RabbitTemplate;
  8. import org.springframework.beans.factory.annotation.Value;
  9. import org.springframework.beans.factory.config.ConfigurableBeanFactory;
  10. import org.springframework.context.annotation.Bean;
  11. import org.springframework.context.annotation.Configuration;
  12. import org.springframework.context.annotation.Scope;
  13. /**
  14. * @Description: RabbitConfig
  15. * @Author: lyt
  16. * @Date: 2019/6/21 11:21
  17. */
  18. @Configuration
  19. public class RabbitConfig {
  20. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  21. @Value("${spring.rabbitmq.host}")
  22. private String host;
  23. @Value("${spring.rabbitmq.port}")
  24. private int port;
  25. @Value("${spring.rabbitmq.username}")
  26. private String username;
  27. @Value("${spring.rabbitmq.password}")
  28. private String password;
  29. public static final String EXCHANGE_SETTLE = "settexchange";
  30. public static final String QUEUE_SETTLE = "confirmSettle";
  31. public static final String QUEUE_PRESETTLE = "preSettle";
  32. public static final String ROUTINGKEY_CONFIRM = "confirmSettle";
  33. public static final String ROUTINGKEY_PRE = "preSettle";
  34. @Bean
  35. public ConnectionFactory connectionFactory() {
  36. CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host,port);
  37. connectionFactory.setUsername(username);
  38. connectionFactory.setPassword(password);
  39. connectionFactory.setVirtualHost("/");
  40. connectionFactory.setPublisherConfirms(true);
  41. return connectionFactory;
  42. }
  43. @Bean
  44. @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
  45. //必须是prototype类型
  46. public RabbitTemplate rabbitTemplate() {
  47. RabbitTemplate template = new RabbitTemplate(connectionFactory());
  48. return template;
  49. }
  50. /**
  51. * 针对消费者配置
  52. * 1. 设置交换机类型
  53. * 2. 将队列绑定到交换机
  54. FanoutExchange: 将消息分发到所有的绑定队列,无routingkey的概念
  55. HeadersExchange :通过添加属性key-value匹配
  56. DirectExchange:按照routingkey分发到指定队列
  57. TopicExchange:多关键字匹配
  58. */
  59. @Bean
  60. public DirectExchange directExchange() {
  61. return new DirectExchange(EXCHANGE_SETTLE);
  62. }
  63. /**
  64. * 获取队列Pre
  65. * @return
  66. */
  67. @Bean
  68. public Queue queuePre() {
  69. //队列持久
  70. return new Queue(QUEUE_PRESETTLE, true);
  71. }
  72. @Bean
  73. public Binding bindingPre() {
  74. return BindingBuilder.bind(queuePre()).to(directExchange()).with(RabbitConfig.ROUTINGKEY_PRE);
  75. }
  76. /**
  77. * 获取队列confirm
  78. * @return
  79. */
  80. @Bean
  81. public Queue queueConfirm() {
  82. //队列持久
  83. return new Queue(QUEUE_SETTLE, true);
  84. }
  85. @Bean
  86. public Binding binding() {
  87. return BindingBuilder.bind(queueConfirm()).to(directExchange()).with(RabbitConfig.ROUTINGKEY_CONFIRM);
  88. }
  89. }