实战背景 RabbitMQ实战第一阶段-RabbitMQ的官网拜读已经结束了,相信诸位童鞋或多或少都能入了个门,若是仍是以为迷迷糊糊似懂非懂的,那我建议诸位能够亲自去拜读拜读官网的技术手册或者看多几篇个人视频跟源码!由于接下来咱们将进入第二阶段,即应用实战阶段mysql
实战分析 应用实战,固然是指真正的在企业级项目中的应用。在这一阶段中,我将以目前流行的微服务架构为奠定,整合RabbitMQ实现项目中常见的一些业务模块并解决微服务系统或者分布式系统一些常见的问题。其中微服务框架将采用SpringBoot,实体映射框架将采用Mybatis,搭建一个企业级微服务项目,并以此来实战RabbitMQ涉及的各大技术点!git
实战交流 在学习过程当中,若是有相关问题,能够加我我的QQ:1974544863或者文末扫码加我我的微信进行交流,另外,感兴趣的童鞋能够加微信公众号,会不定时推送干货哦!web
实战历程 从这一阶段开始,我将更换一下IDE为IDEA,固然啦,若是你想用eclipse,其实也是没多大问题的!那就让咱们开始吧。spring
2.下面咱们就构建一个企业级的微服务项目吧。在其中咱们须要加入rabbitmq,mysql,druid以及log4j等的jar包依赖,并构建好包目录结构,以后,咱们建立一个数据库以及一个表“order_record”即订单记录表吧。相关的截图以下所示(相关源码在文末有提供下载,视频教程能够文末加微信咨询所取!) sql
3.在后续文章分享以及视频教程中涉及到的源码实战将以本篇博文搭建的项目作为奠定!数据库
4.接下来为了测试项目搭建后是否能够运行,咱们须要基于mvc三层模式开发一下简单的功能,首先固然是写个HelloWorldController,写个hello world请求方法,而后将项目跑起来,postman模拟一下请求,看看是否返回指定的数据。以下所示: 微信
5.若是以为上面的测试太简单了,那能够把上面的表 order_record 用mybatis逆向工程生成相应的mapper以及mapper.xml,而后也是在同个controller中写个请求方法:返回全部的订单列表,以下所示: mybatis
6.最后是核心重点的RabbitmqConfig的配置,做为RabbitMQ的全局配置架构
@Configuration
public class RabbitmqConfig {
private static final Logger log= LoggerFactory.getLogger(RabbitmqConfig.class);
@Autowired
private Environment env;
@Autowired
private CachingConnectionFactory connectionFactory;
@Autowired
private SimpleRabbitListenerContainerFactoryConfigurer factoryConfigurer;
/**
* 单一消费者
* @return
*/
@Bean(name = "singleListenerContainer")
public SimpleRabbitListenerContainerFactory listenerContainer(){
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setMessageConverter(new Jackson2JsonMessageConverter());
factory.setConcurrentConsumers(1);
factory.setMaxConcurrentConsumers(1);
factory.setPrefetchCount(1);
factory.setTxSize(1);
return factory;
}
/**
* 多个消费者
* @return
*/
@Bean(name = "multiListenerContainer")
public SimpleRabbitListenerContainerFactory multiListenerContainer(){
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factoryConfigurer.configure(factory,connectionFactory);
factory.setMessageConverter(new Jackson2JsonMessageConverter());
factory.setAcknowledgeMode(AcknowledgeMode.NONE);
factory.setConcurrentConsumers(env.getProperty("spring.rabbitmq.listener.concurrency",int.class));
factory.setMaxConcurrentConsumers(env.getProperty("spring.rabbitmq.listener.max-concurrency",int.class));
factory.setPrefetchCount(env.getProperty("spring.rabbitmq.listener.prefetch",int.class));
return factory;
}
@Bean
public RabbitTemplate rabbitTemplate(){
connectionFactory.setPublisherConfirms(true);
connectionFactory.setPublisherReturns(true);
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMandatory(true);
rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
log.info("消息发送成功:correlationData({}),ack({}),cause({})",correlationData,ack,cause);
}
});
rabbitTemplate.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 rabbitTemplate;
}
复制代码
6.如此一来,整个项目的搭建基本上没有多大问题了。所谓工欲善其事必先利其器,有了项目作为奠定,那么就阔以进行后面的全部实战了!并发
实战总结:基于SpringBoot的微服务项目基本上整合搭建好了,接下来就有了后续各大业务模块以及技术点的实战奠定,学习过程若是有相关问题,能够加文中提供的联系方式进行技术交流!另外,最近我将SpringBoot整合RabbitMQ一系列文章的精华进行了抽取,并发起了一场gitchat交流会,欢迎你们来交流!扫一扫下面的二维码便可进入哦
另外,相关文章也会同步在微信公众号发布哦,欢迎关注!学习过程若是有相关问题能够加QQ:1974544863或者QQ群:583522159 进行交流
附注:最近正值分享季,debug本着追求技术,热爱分享的信念,特意下降了学习门槛,几乎低价分享给广大童鞋学习! SpringBoot整合RabbitMQ完整视频教程学习地址->连接:pan.baidu.com/s/1bB67VCEx… 密码:gazq 这才是正版的连接地址,其余全部的连接或者高价骗取费用的都是盗版的,并且debug我是有提供学习过程技术交流的:QQ-1974544863 !!欢迎广大学员学习交流!