设为首页 加入收藏

TOP

Java SpringBoot集成RabbitMQ实战和总结(一)
2018-10-10 04:11:04 】 浏览:1385
Tags:Java SpringBoot 集成 RabbitMQ 战和 总结

目录


交换器、队列、绑定的声明
关于消息序列化
同一个队列多消费类型
注解将消息和消息头注入消费者方法
关于消费者确认
关于发送者确认模式
消费消息、死信队列和RetryTemplate
RPC模式的消息(不常用)
关于消费模型
关于RabbitMq客户端的线程模型


在公司里一直在用RabbitMQ,由于api已经封装的很简单,关于RabbitMQ本身还有封装的实现没有了解,最近在看RabbitMQ实战这本书,结合网上的一些例子和spring文档,实现了RabbitMQ和spring的集成,对着自己平时的疑惑做了一些总结。


交换器、队列、绑定的声明
SpringAMQP项目对RabbitMQ做了很好的封装,可以很方便的手动声明队列,交换器,绑定。如下:


/**
 * 队列
 * @return
 */
@Bean
@Qualifier(RabbitMQConstant.PROGRAMMATICALLY_QUEUE)
Queue queue() {
    return new Queue(RabbitMQConstant.PROGRAMMATICALLY_QUEUE, false, false, true);
}


/**
 * 交换器
 * @return
 */
@Bean
@Qualifier(RabbitMQConstant.PROGRAMMATICALLY_EXCHANGE)
TopicExchange exchange() {
    return new TopicExchange(RabbitMQConstant.PROGRAMMATICALLY_EXCHANGE, false, true);
}
/**
 * 声明绑定关系
 * @return
 */
@Bean
Binding binding(@Qualifier(RabbitMQConstant.PROGRAMMATICALLY_EXCHANGE) TopicExchange exchange,
                @Qualifier(RabbitMQConstant.PROGRAMMATICALLY_QUEUE) Queue queue) {
    return BindingBuilder.bind(queue).to(exchange).with(RabbitMQConstant.PROGRAMMATICALLY_KEY);
}


/**
 * 声明简单的消费者,接收到的都是原始的{@link Message}
 *
 * @param connectionFactory
 *
 * @return
 */
@Bean
SimpleMessageListenerContainer simpleContainer(ConnectionFactory connectionFactory) {
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.setMessageListener(message -> log.info("simple receiver,message:{}", message));
    container.setQueueNames(RabbitMQConstant.PROGRAMMATICALLY_QUEUE);
    return container;
}


消费者和生产者都可以声明,交换器这种一般经常创建,可以手动创建。需要注意对于没有路由到队列的消息会被丢弃。


如果是Spring的话还需要声明连接:


@Bean
ConnectionFactory connectionFactory(@Value("${spring.rabbitmq.port}") int port,
                                    @Value("${spring.rabbitmq.host}") String host,
                                    @Value("${spring.rabbitmq.username}") String userName,
                                    @Value("${spring.rabbitmq.password}") String password,
                                    @Value("${spring.rabbitmq.publisher-confirms}") boolean isConfirm,
                                    @Value("${spring.rabbitmq.virtual-host}") String vhost) {
    CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
    connectionFactory.setHost(host);
    connectionFactory.setVirtualHost(vhost);
    connectionFactory.setPort(port);
    connectionFactory.setUsername(userName);
    connectionFactory.setPassword(password);
    connectionFactory

首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java程序语言的后门-反射机制 下一篇Java Bean与Map之间相互转化的实现

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目