- Queue?
Queue(队列)是RabbitMQ的内部对象,用于存储消息,用下图表示。
RabbitMQ中的消息都只能存储在Queue中,生产者(下图中的P)生产消息并最终投递到Queue中,消费者(下图中的C)可以从Queue中获取消息并消费。
多个消费者可以订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。
? ?搭建工程步骤就直接忽略不写了,直接聊重点第一步工程搭建完成后导入POM.xml依赖:如下
<!-- rabbitMQ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
配置yml如下:
spring:
application:
name: rabbitmq-consumers #工程名
rabbitmq:
host: 127.0.0.1 #RabbitMQ地址
port: 5672 #RabbitMQ端口
username: text #用户名
password: text #用户名密码
virtual-host: /text #存储路径
listener:
direct:
acknowledge-mode: manual #手动确认
创建一个config目录在config目录中创建RabbitmqConfig类如下:
@SpringBootConfiguration
public class RabbitmqConfig {
// 配置一个工作模型Queue队列
@Bean
public Queue hello() {
return new Queue("hello");
}
}
(hello)是队列名称根据自己业务需求进行编写,或者需要活的可以存放在yml中进行读取
创建一个controller目录,在目录中创建一个controller访问层如下所属
@RestController
public class RabbitmqController {
@Autowired
private RabbitTemplate template;
@GetMapping("/sendHello")
public Object sendWork(@RequestParam("sharc")String sharc) {
template.convertAndSend("hello", sharc );
return "发送成功...";
}
}
使用RabbitTemplate发送Queue队列为hello的一个消息,然后创建一个消费者进行对这个hello的消息进行消费
创建一个为消费者的工程,忽略不计直接上关键代码
spring:
application:
name: rabbitmq-producers
rabbitmq:
host: 127.0.0.1
port: 5672
username: text
password: text
virtual-host: /text
server:
port: 8081
创建一个WorkReceiveListener类 监听hello队列里面的消息,代码如下
@Component
public class HelloReceiveListener{
@RabbitListener(queues = "hello")
public void receiveMessage(String msg, Message message) {
// 只包含发送的消息
System.out.println("1接收到消息:" + msg);
// channel 通道信息
// message 附加的参数信息
}
@RabbitListener(queues = "hello")
public void receiveMessage2(Object obj, Message message) {
// 包含所有的信息
System.out.println("2接收到消息:" + obj);
}
}
?
时间有限,先更到这 有时间继续完善
|