一、生产者
1、源码地址
2、添加rabbitMQ依赖
<!--rabbitmq依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
3、连接rabbitmq配置
spring:
rabbitmq:
addresses: 127.0.0.1:5672
username: guest
password: guest
virtual-host: /
分别是rabbitmq服务端地址、用户名、密码、虚拟主机路径
4、发送消息
可直接用RabbitTemplate来发送消息,代码如下
@Autowired
private RabbitTemplate rabbitTemplate;
public void sendPerson(Person person) throws Exception{
CorrelationData correlationData = new CorrelationData();
correlationData.setId(person.getMessageId());
rabbitTemplate.convertAndSend("person-exchange",
"person.abcd",
person,
correlationData);
}
一、消费者
1、源码地址
2、依赖如上一样,配置如下:
##rabbitmq基本配置
spring:
rabbitmq:
addresses: 127.0.0.1:5672
username: guest
password: guest
virtual-host: /
##消费端配置
listener:
simple:
concurrency: 5
max-concurrency: 10
acknowledge-mode: auto
增加了消费端的基本配置
2、消费消息
@RabbitListener(
bindings = @QueueBinding(
value = @Queue(value = "person-queue",durable = "true"),
exchange = @Exchange(name = "person-exchange",durable = "true",type = "topic"),
key = "person.*"
)
)
@RabbitHandler
public void onPersonMessage(@Payload Person person,
@Headers Map<String,Object> headers,
Channel channel) throws Exception{
//消费者操作
System.out.println("===收到消息,开始消费=====");
System.out.println("personID:" + person.getId());
Long deliverTag = (Long)headers.get(AmqpHeaders.DELIVERY_TAG);
channel.basicAck(deliverTag,false);
}
@RabbitListener注解可以指定exchange、queue、routekey
3、测试
启动消费者项目rabbitmq-consumer,
生产者项目,通过JunitTest调用发送消息的方法
@Autowired
private RabbitPersonSender rabbitPersonSender;
@Test
public void testSend1() throws Exception{
Person person = new Person();
person.setId("00001");
person.setName("Tony");
person.setMessageId(System.currentTimeMillis()+"$"+ UUID.randomUUID().toString());
rabbitPersonSender.sendPerson(person);
}
生产者发送消息成功,消费端成功消费消息,控制台打印如下: