RocketMQ消费者

@Component
@Order(10000)
public class RocketMQConsumer implements InitializingBean {
	Longger logger  = LoggerFactory.getLogger(RocketMQConsumer.class);

	@Value("${rocketm1.namesrv.addr}")
	private String namesrvAddr;

	/**
	* rocket topic 后缀
	*/
	private static final String MQ_TOPIC_SUFFIX = "_client_face_queue_7";

/**
*内部是使用长轮询Pull方式从MetaQ服务器拉消息,然后再回调用户Listener方法
*/
@Override
public void afterPropertiesSet()
	throw Exception {
		/**
		*一个应用创建一个Consumer,由应用来维护此对象,可以设置为全局对象或者单例
		*注意:ConsumerGroupName需要由应用来保证唯一。
		*不同consumer group里的consumer即便是消费同一个topic下的同一个queue,
		*那消费进度也是分开存储的。也就是说,不同的consumer group内的consumer的消费
		*完全隔离,不受影响。
		*/
		DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("消费者组名");
		consumer.setNamesrvAddr(namesrvAddr);
		consumer.setInstanceName("实例名称");
		// 广播消费是指一个consumer只要订阅了某个topic的消息,那它就会收到topic下的所有queue里的消息,
		// 而不管这个consumer的group是什么。所以对于广播消费来说,consumer group没什么实际意义。consumer可以在实例化时,我们可以指定是集群消费还是广播消费。
		// consumer.setMessageModel(MessageModel.BROADCASTING);
		/**
		* 订阅指定topic下tags分别等于TagA或TagC或TagD
		*/
		// consumer.subscribe("TopicTest1","TagA || TagC || TagD");
		/**
		* 订阅指定topic下所有消息
		* 注意: 一个consumer对象可以订阅多个topic
		*/
		// topic
		String topic = "消息主题";
		consumer.subscribe("主题","tag");
		// 设置最大重试次数
		consumer.setMaxReconsumeTiimes(30);
		// 最小线程数
		consumer.setConsumeThreadMin(1);
		// 最大线程数
		consumer.setConsumeThreadMax(5);
		consumer.registerMessageListenter(new MessageListenerConcurrently() {
			/**
			* 默认msgs里只有一条消息通过设置consumeMessageBatchMaxSize参数来批量接收消息
			*/
			@Override
			public consumeConcurrentlyStatus consumeMessage(List<>MessageExt,ConsumeConcurrentlyContext context) {
			MessgaeExt msg = msgs.get(0);
			if(msg.getTopic.equals(topic)) {
				// 执行消费逻辑
				try{
				Map<String,Object> map = (Map)ObjectUtil.byteToObject(msg.getBody());
				// 执行业务逻辑
				}
				catch (Exception e){
					return ConsumeConcurrentlyStatus.RECONSUME_LATER;
				}
			}
			return ConsumeConsurrentlyStatus.CONSUME_SUCCESS;
			}
		});
		/**
		*Consumer对象在使用之前必须要调用start初始化,初始化一次即可
		*/
		consumer.start();
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值