From daa697719eb0ddfd170f1ab94c5422a4f5b93951 Mon Sep 17 00:00:00 2001 From: zhaoxiaohao <279049017@qq.com> Date: Fri, 18 Sep 2020 14:36:54 +0800 Subject: [PATCH] Merge branch 'dev' --- kidgrow-commons/kidgrow-rabbitmq-spring-boot-starter/src/main/java/com/kidgrow/rabbitmq/config/RabbitConfig.java | 195 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 195 insertions(+), 0 deletions(-) diff --git a/kidgrow-commons/kidgrow-rabbitmq-spring-boot-starter/src/main/java/com/kidgrow/rabbitmq/config/RabbitConfig.java b/kidgrow-commons/kidgrow-rabbitmq-spring-boot-starter/src/main/java/com/kidgrow/rabbitmq/config/RabbitConfig.java new file mode 100644 index 0000000..f26e939 --- /dev/null +++ b/kidgrow-commons/kidgrow-rabbitmq-spring-boot-starter/src/main/java/com/kidgrow/rabbitmq/config/RabbitConfig.java @@ -0,0 +1,195 @@ +package com.kidgrow.rabbitmq.config; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.*; +import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.connection.CorrelationData; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br> + * + * @Description: RabbitMQ连接基本配置<br> + * @Project: <br> + * @CreateDate: Created in 2020/3/23 17:14 <br> + * @Author: <a href="4345453@kidgrow.com">liuke</a> + */ +@ConfigurationProperties(prefix = "spring.rabbitmq") +@Slf4j +@Data +@Configuration +public class RabbitConfig { + + /** + * RabbitMq服务器IP + */ + private String host; + /** + * 端口 + */ + private int port; + /** + * 用户名 + */ + private String username; + /** + * 密码 + */ + private String password; + /** + * Virtual Hosts权限管理 + */ + private String virtualHost; + /** + * 交换机名称 + */ + private String exchangeName; + /** + * 队列名称 + */ + private String queueName; + /** + * routingKeyName名称 + */ + private String routingKeyName; + + /** + * AI返回结果队列 + */ + private String AIEvaluationResults; + + /** + * 骨龄评价统计 + */ + private String BoneAgeEvaluationData; + + /** + * 档案统计 + */ + private String ChildRecordData; + + /** + * 报告统计 + */ + private String ReportData; + + @Bean + public ConnectionFactory connectionFactory() { + CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host,port); + connectionFactory.setUsername(username); + connectionFactory.setPassword(password); + connectionFactory.setVirtualHost(virtualHost); + connectionFactory.setPublisherConfirms(true); + connectionFactory.setPublisherReturns(true); + //当Channel数量大于缓存数量时,多出来没法放进缓存的会被关闭。 + connectionFactory.setChannelCacheSize(10); + //2、CHANNEL模式,程序运行期间ConnectionFactory会维护着一个Connection, + // 所有的操作都会使用这个Connection,但一个Connection中可以有多个Channel, + // 操作rabbitmq之前都必须先获取到一个Channel, + // 否则就会阻塞(可以通过setChannelCheckoutTimeout()设置等待时间), + // 这些Channel会被缓存(缓存的数量可以通过setChannelCacheSize()设置); + connectionFactory.setCacheMode(CachingConnectionFactory.CacheMode.CONNECTION); //设置CONNECTION模式,可创建多个Connection连接 + //单位:毫秒;配合channelCacheSize不仅是缓存数量,而且是最大的数量。 + // 从缓存获取不到可用的Channel时,不会创建新的Channel,会等待这个值设置的毫秒数 + //同时,在CONNECTION模式,这个值也会影响获取Connection的等待时间, + // 超时获取不到Connection也会抛出AmqpTimeoutException异常。 + connectionFactory.setChannelCheckoutTimeout(600); + //仅在CONNECTION模式使用,设置Connection的缓存数量。 + connectionFactory.setConnectionCacheSize(3); + //setConnectionLimit:仅在CONNECTION模式使用,设置Connection的数量上限。 + connectionFactory.setConnectionLimit(10); + return connectionFactory; + } + + + @Bean + public RabbitAdmin rabbitAdmin(@Autowired ConnectionFactory connectionFactory) { + return new RabbitAdmin(connectionFactory); + } + + + @Bean + public RabbitTemplate rabbitTemplate(@Autowired ConnectionFactory connectionFactory) { + RabbitTemplate template = new RabbitTemplate(connectionFactory); + template.setExchange(exchangeName); + //客户端开启confirm模式 + template.setMandatory(true); + template.setConfirmCallback(new RabbitTemplate.ConfirmCallback() { + @Override + public void confirm(CorrelationData correlationData, boolean ack, String cause) { + log.info("消息发送成功:correlationData({}),ack({}),cause({})", correlationData, ack, cause); + } + }); + template.setReturnCallback(new RabbitTemplate.ReturnCallback() { + @Override + public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) { + log.info("消息丢失:exchange({}),route({}),replyCode({}),replyText({}),message:{}", exchange, routingKey, replyCode, replyText, message); + } + }); + return template; + } + + @Bean + public TopicExchange exchange() { + return new TopicExchange(exchangeName); + } + + @Bean + public Queue KidgrowQueue() { + return new Queue(queueName); + } + + @Bean + Binding bindingExchangeMessage(TopicExchange exchange) { + return BindingBuilder.bind(KidgrowQueue()).to(exchange).with(routingKeyName); + } + + @Bean + public Queue AIEvaluation() { + return new Queue("AIEvaluation"); + } + + @Bean + public Queue AIEvaluationResults() { + return new Queue(AIEvaluationResults); + } + + @Bean + public Queue BoneAgeEvaluationData() { + return new Queue(BoneAgeEvaluationData); + } + + @Bean + public Queue ChildRecordData() { + return new Queue(ChildRecordData); + } + + + @Bean + public Queue ReportData() { + return new Queue(ReportData); + } + + + @Bean + Binding bindingExchangeAIEvaluation(TopicExchange exchange) { + return BindingBuilder.bind(AIEvaluation()).to(exchange).with(routingKeyName); + } + + @Bean + public Queue AdvancedEvaluation() { + return new Queue("AdvancedEvaluation"); + } + + @Bean + Binding bindingExchangeAdvancedEvaluation(TopicExchange exchange) { + return BindingBuilder.bind(AdvancedEvaluation()).to(exchange).with(routingKeyName); + } +} -- Gitblit v1.8.0