Using RabbitMQ, Spring AMQP and Spring Integration(着重翻译)

    技术2022-05-20  38

    英文地址:http://www.digitalsanctum.com/2010/08/31/using-rabbitmq,-spring-amqp-and-spring-integration/

     

     

         首先,我假定您已经了解了Spring,RabbitMQ,在原来企业级消息队列中的解决方案中,不会出现二者的名字。但是,最近一段时间,因为RabbitMQ成功的在一些商业的应用上取得了成功,使得它开源,稳定,值得信赖的知名度被打开了。

         而今我们就尝试将RabbitMQ和Spring整合起来,在经过了很多的自己的实现之后,我发现了RabbitMQ的开发社区出现了一个团队负责实现了这个功能.

         这个模块就是Spring AMQP

         在Spring AMQP没有发布之前,我就可以下载调试安装了。

         在Mark的带领下,这个团队帮助我们解决了很多问题!在仔细的检查了几个Bugs之后,Spring AMQP终于能否灵活的使用了。

         

         这个比先前的使用要简单很多了。

         例如写一个消费类如下:

         package spg.poly.consumer.conf; import org.springframework.amqp.core.*; import org.springframework.amqp.rabbit.config.AbstractRabbitConfiguration; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.connection.SingleConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter; import org.springframework.amqp.support.converter.JsonMessageConverter; import org.springframework.amqp.support.converter.MessageConverter; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; import spg.poly.consumer.handler.PolyCalcHandler; import spg.poly.core.domain.SpgExchange; import spg.poly.core.domain.SpgQueue; /** * @author witbsha Aug 13, 2010 10:56:15 AM */ @Configuration @ImportResource("classpath:/polyConsumerPropertiesContext.xml") public class ConsumerConfiguration extends AbstractRabbitConfiguration { @Value("${poly-consumer.version}") private String version; @Value("${poly-consumer.concurrentConsumers}") private int concurrentConsumers; @Value("${poly-consumer.rabbitHost}") private String rabbitHost; @Value("${poly-consumer.rabbitUser}") private String rabbitUser; @Value("${poly-consumer.rabbitPass}") private String rabbitPass; private static final String DBCM_PLY_REQUEST_PREFIX = "dbcm-ply-request"; public String getVersion() { return this.toString(); } @Bean public SimpleMessageListenerContainer listenerContainer() { SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); container.setConnectionFactory(connectionFactory()); container.setQueues(dbcmPlyRequestQueue()); container.setMessageListener(messageListenerAdapter()); container.setConcurrentConsumers(concurrentConsumers); return container; } @Bean public MessageListenerAdapter messageListenerAdapter() { return new MessageListenerAdapter(polyCalcHandler(), jsonMessageConverter()); } @Bean public FanoutExchange dbcmFanoutExchange() { return new FanoutExchange(SpgExchange.DBCM_FANOUT.getExchangeName()); } @Bean public DirectExchange dbcmExchange() { return new DirectExchange(SpgExchange.DBCM.getExchangeName()); } @Bean public PolyCalcHandler polyCalcHandler() { PolyCalcHandler pch = new PolyCalcHandler(); pch.setRabbitTemplate(rabbitTemplate()); return pch; } @Bean public Binding dbcmPlyBinding() { return BindingBuilder.from(dbcmPlyRequestQueue()).to(dbcmFanoutExchange()); } @Bean public Binding dbcmPlyReplyBinding() { return BindingBuilder.from(dbcmPlyResponseQueue()).to(dbcmExchange()).withQueueName(); } @Bean public ConnectionFactory connectionFactory() { SingleConnectionFactory connectionFactory = new SingleConnectionFactory(rabbitHost); connectionFactory.setUsername(rabbitUser); connectionFactory.setPassword(rabbitPass); return connectionFactory; } @Override public RabbitTemplate rabbitTemplate() { RabbitTemplate template = new RabbitTemplate(connectionFactory()); template.setMessageConverter(jsonMessageConverter()); return template; } @Bean public Queue dbcmPlyRequestQueue() { return new UniquelyNamedQueue(DBCM_PLY_REQUEST_PREFIX); } @Bean public Queue dbcmPlyResponseQueue() { return new Queue(SpgQueue.DBCM_PLY_RESPONSE.getQueueName()); } @Bean public MessageConverter jsonMessageConverter() { return new JsonMessageConverter(); } @Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("/nConsumerConfiguration"); sb.append("/n{version='").append(version).append('/''); sb.append("/n, concurrentConsumers='").append(concurrentConsumers).append('/''); sb.append("/n, rabbitHost='").append(rabbitHost).append('/''); sb.append("/n, rabbitUser='").append(rabbitUser).append('/''); sb.append("/n, rabbitPass='").append(rabbitPass).append('/''); sb.append('}'); return sb.toString(); } } 

    Chatopera博客 聊天机器人 机器学习 智能客服 北京华夏春松科技有限公司,为企业交付智能客服系统、智能对话机器人、机器人客服、Chatbot。https://www.chatopera.com

    最新回复(0)