1. 为什么使用mq
我们平时的程序多数都是同步的,常见的RestApi,都是同步的调用。在处理异步的请求时,适合采用消息中间件。特别是涉及到一些跨系统的调用,而且在处理一些高并发问题的时候,也可以采用mq队列的串行特征,使得开发简单。此外,mq的订阅模式,适用于在消费生产者发出信息时不知道有多少消费者时,这种模式完美适用。
2. 常见的mq有哪几种
常见的mq主要有activemq,rabbitmq,rocketmq
activemq
是Apache出品的,是一个完全支持JMS规范的JSMProvider实现。提供客户端支持跨语言和协议。它能够以代理人和点对点的技术实现队列。
rabbitmq
是使用Erlang编写的一个开源的消息队列,本身支持很多协议AMQP,XMPP,SMTP,STOMP,也正是因为支持这么多的协议,使得它很重量级,更适合企业级的开发。它采用经纪人(broker)架构,这意味着消息在发送给客户端时,先在中心队列排队。对路由(routing)和负载均衡(load balance)和数据持久化都有很好的支持。
rocketmq
是阿里巴巴开源的一个消息中间件框架(阿里内部称为MetaQ),于2012年开源,并在2017年正式成为Apache的顶级项目。
3. RabbitMq使用配置
rabbitmq(安装)。
安装好后默认的web访问地址是
http://127.0.0.1:15672
使用java连接的默认端口是5672
默认的用户名和密码是:guest/guest
4. RabbitMq使用demo
添加pom配置
代码语言:javascript复制 <!-- rabbitMq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
修改配置文件application.yml
代码语言:javascript复制spring:
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest
publisher-confirms: true
新增配置类
代码语言:javascript复制@Configuration
public class RabbitConfig {
@Bean
public Queue Queue() {
return new Queue("logOper");
}
}
生产者
代码语言:javascript复制@Service
@Slf4j
public class LogProducer {
@Autowired
private AmqpTemplate rabbitTemplate;
public void send(LogOper logOper) {
log.info("Sender logOper: " logOper.toString());
rabbitTemplate.convertAndSend("logOper", logOper);
}
}
消费者
代码语言:javascript复制@Slf4j
@Component
@RabbitListener(queues = "logOper")
public class LogConsumer {
@Autowired
private LogOperDao logOperDao;
@RabbitHandler
public void process(LogOper logOper) {
log.info("Receiver logOper : " logOper);
logOperDao.addLogOper(logOper);
}
}
4. 总结
上面只是简单的一对一形式的使用,rabbitmq实际上是支持多种模式比如一对多,多对一,多对多模式的场景。只需修改少量的配置就可以完成,后面再具体进行分析。
5. 参考
RocketMQ实战(一)
RabbitMQ学习笔记
springboot rabbitmq整合示例程
spring boot实战(第十二篇)整合RabbitMQ
RabbitMQ 使用参考
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/186196.html原文链接:https://javaforall.cn