RabbitMQ

遵从AMQP(高级消息队列协议Advanced Message Queuing Protocol),协议模型:
Publisher application(消息生产者)把消息投递到消息中间件的Server上经过Virtual host(虚拟主机)到达Exchange(交换机),
另一边的Consumer application(消息消费者)只需监听Message Queue(消息对列),其中交换机和消息队列有一个绑定关系(通过一定的Routing key(路由键)Binding关联),
即交换机把消息生产者投递上来的消息路由到消息队列中供消息消费者消费(一个虚拟主机中的交换机和消息队列不能是一样的)

@Component//设置为组件
public class OrderSender {
	@Autowired
	private RabbitTemplate rabbitTemplate;//springboot提供了自动装配的消息发送模板
	//发消息
	public void sendOrder(Order order) throws Exception {
		
		
		CorrelationData correlationData =new CorrelationData();
		correlationData.setId(order.getMessageId());
		
		rabbitTemplate.convertAndSend("order-exchange",//exchange 
				"order.0000",//routingKey 
				order, //object消息体内容
				correlationData);//correlationData消息唯一id(需要创建)
	}
}

浏览器MQ控制台创建Exchange和消息队列,绑定
测试:

@Autowired
	private OrderSender orderSender;
	@Test
	public void testSend0() throws Exception {
		Order order = new Order();
		order.setId(0);
		order.setName("");
		order.setMessageId("000000000000");//写个唯一算法
		orderSender.sendOrder(order);
	}

在这里插入图片描述0000000000000000
0000000000000000

@Component
public class OrderReceiver {
	/**
	 * 监听接收消息
	 * @param order
	 * @param map
	 * @param channel
	 * @throws Exception
	 */
	
	
	@RabbitListener(bindings=@QueueBinding(
				value = @Queue(value = "order-queue",durable = "true"),
				exchange = @Exchange(name = "order-exchange",durable = "true",type = "topic"),
				key = "order.*"
				
			)
	)//指定监听的队列并且可以自动创建Exchange,queue和添加路由键自动绑定
	
	@RabbitHandler
	public void onOrderMessage (@Payload Order order,//消息实体
			@Headers Map<String, Object> map,//消息头
			Channel channel//手工签收依赖Channel
			) throws Exception {
		//消息消费
		System.out.println("开始消费");
		System.out.println("订单信息"+order.getId());
		//手工确认
		channel.basicAck((Long)map.get(AmqpHeaders.DELIVERY_TAG),//deliveryTag(告诉mq已经收到消息)
				false);//multiple(是否支持批量签收)
	}
}

0000000000000000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值