文章源自JAVA秀-https://www.javaxiu.com/21188.html 闪耀的瞬间 收藏 分类专栏: 版权 文章源自JAVA秀-https://www.javaxiu.com/21188.html 2.RabbitMQ 特点 文章源自JAVA秀-https://www.javaxiu.com/21188.html 消息默认存储在磁盘上,磁盘的处理能力是有限,对于大流量、高并发场景,RabbitMQ有内存模式,内存可以高速处理消息,但是需要磁盘模式配合,防止消息丢失,关于RabbitMQ集群方面的,请参考 RabbitMQ + Haproxy 高可用队列集群文章源自JAVA秀-https://www.javaxiu.com/21188.html 3.RabbitMQ 中的概念模型 文章源自JAVA秀-https://www.javaxiu.com/21188.html 生产者(producer)创建消息,然后发布到队列(queue)中,消费者(consumer)订阅某个队列,最后将消息发送到监听的消费者,可以有多个消费者,消息会被平均分摊给多个消费者进行处理 RabbitMQ有 4 个重要概念,分别为:虚拟主机,交换机,队列,和绑定。文章源自JAVA秀-https://www.javaxiu.com/21188.html Exchange:交换机用于转发消息,但是它不会做存储 ,如果没有 Queue bind 到 Exchange 的话,它会直接丢弃掉 Producer 发送过来的消息。文章源自JAVA秀-https://www.javaxiu.com/21188.html 这里有一个比较重要的概念:路由键 。消息到交换机的时候,交互机会转发到对应的队列中,那么究竟转发到哪个队列,就要根据该路由键。 RabbitMQ常用的交换机Exchange Type有四种:direct、fanout、topic、headers。文章源自JAVA秀-https://www.javaxiu.com/21188.html 4.SrpingBoot集成 RabbitMQ 文章源自JAVA秀-https://www.javaxiu.com/21188.html 1).添加引用依赖文章源自JAVA秀-https://www.javaxiu.com/21188.html 2).添加配置,rabbitmq的安装地址、端口以及账户信息,没有rabbitmq环境的可以参考 RabbitMQ安装教程文章源自JAVA秀-https://www.javaxiu.com/21188.html 3).队列配置文章源自JAVA秀-https://www.javaxiu.com/21188.html 4).生产者,AmqpTemplate是springboot 提供的默认实现文章源自JAVA秀-https://www.javaxiu.com/21188.html 5).消费者,监听队列,处理消息文章源自JAVA秀-https://www.javaxiu.com/21188.html 6).测试,生产者与消费者的queue name必须一致,不然无法接收文章源自JAVA秀-https://www.javaxiu.com/21188.html 运行测试方法时,可以在rabbitmq管理后台看到,hello队列会自动创建文章源自JAVA秀-https://www.javaxiu.com/21188.html 还可以测试一对多,多对多关系,看队列是怎么消费的 多个生成者文章源自JAVA秀-https://www.javaxiu.com/21188.html 多个消费者,监听 hello 队列 运行,查看结果:多个消费者均匀的消费多个消息 本篇是抛砖引玉,介绍了一些概念和简单使用,它的高级使用,请参考下面: centos7下RabbitMQ安装教程 RabbitMQ + Haproxy 高可用队列集群 RabbitMQ 延迟队列的实现文章源自JAVA秀-https://www.javaxiu.com/21188.html 下篇 发送邮件文章源自JAVA秀-https://www.javaxiu.com/21188.html 文章源自JAVA秀-https://www.javaxiu.com/21188.htmlSpringBoot项目开发(十一):RabbitMQ消息队列
文章源自JAVA秀-https://www.javaxiu.com/21188.html文章源自JAVA秀-https://www.javaxiu.com/21188.html
2018-08-09 11:40:54
2194
文章源自JAVA秀-https://www.javaxiu.com/21188.html
1
spring boot
java
SpringBoot 项目开发
文章标签:
rabbitmq 文章源自JAVA秀-https://www.javaxiu.com/21188.html
1.为什么使用消息队列? 文章源自JAVA秀-https://www.javaxiu.com/21188.html文章源自JAVA秀-https://www.javaxiu.com/21188.html
文章源自JAVA秀-https://www.javaxiu.com/21188.html
direct:点对点模式,一对一关系,把消息投递到那些binding key与routing key完全匹配的队列中。
fanout:广播模式,一对多关系,转发消息到所有绑定队列。
topic:发布订阅模式,一对多关系,按规则转发消息,将消息路由到binding key与routing key模式匹配的队列中。
headers:设置header attribute参数类型的交换机,很少用
1234<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
1234spring.rabbitmq.host=192.168.68.128
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
spring.rabbitmq.virtual-host=zy_host
#下面的参数待测试
#prefetch每次一次性从broker里面取的待消费的消息的个数
spring.rabbitmq.listener.simple.prefetch=5
#创建消费者的个数(并发消费)
spring.rabbitmq.listener.simple.concurrency=5
spring.rabbitmq.listener.simple.max-concurrency=10
123456789101112@Configuration
public class RabbitConfig {
//定义一个名称为hello的队列
@Bean
public Queue HelloQueue(){
return new Queue("hello");
}
}
12345678@Component
public class HelloSender {
@Autowired
private AmqpTemplate rabbitTemplate;
public void send(String queueName, String message){
rabbitTemplate.convertAndSend(queueName,message);
}
}
12345678910@Component
@RabbitListener(queues = "hello")
public class HelloReceiver {
@RabbitHandler
public void process(String context){
System.out.println("Receiver : " + context);
}
}
123456789@RunWith(SpringRunner.class)
@SpringBootTest
public class RabbitMQTest {
@Autowired
private HelloSender helloSender;
@Test
public void sendMessage(){
helloSender.send("hello","你好,我要向队列发送消息1...");
}
}
1234567891011文章源自JAVA秀-https://www.javaxiu.com/21188.html
文章源自JAVA秀-https://www.javaxiu.com/21188.html
@Test
public void sendManyMessage(){
for (int i=0;i<5;i++){
helloSender.send("hello","你好,我要向队列发送消息1..."+i);
helloSender.send("hello","你好,我要向队列发送消息2..."+i);
}
}
1234567文章源自JAVA秀-https://www.javaxiu.com/21188.html
文章源自JAVA秀-https://www.javaxiu.com/21188.html

评论