安装rocket
官网上有详细的步骤,不多赘述
下载连接:
链接: 下载链接.
启动步骤连接:
链接: 指导连接.
java代码
生产者
@Component
public class MqConsumer {
@Value("${mq.nameserver.addr}")
private String nameserver;
@Value("${mq.topicname}")
private String topicname;
private DefaultMQPushConsumer consumers;
@Autowired
StockDoMapper stockDoMapper;
@PostConstruct
public void init() throws MQClientException {
consumers = new DefaultMQPushConsumer("stock_consumer_group");
consumers.setNamesrvAddr(nameserver);
consumers.subscribe(topicname, "*");
consumers.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
Message message = list.get(0);
String s = new String(message.getBody());
Map<String, Object> map = JSON.parseObject(s, Map.class);
Integer itemId = (Integer) map.get("itemId");
Integer amount = (Integer) map.get("amount");
stockDoMapper.updateByItemId(itemId, amount);
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumers.start();
}
}
消费者
@Component
public class Publisher {
@Value("${mq.nameserver.addr}")
private String nameserver;
@Value("${mq.topicname}")
private String topicname;
private DefaultMQProducer producer;
@PostConstruct
public void init() throws MQClientException {
//做mq rocket的初始化
producer = new DefaultMQProducer("producer_group");
producer.setNamesrvAddr(nameserver);
producer.start();
}
//同步库存扣减消息
public boolean asyncReduceStock(Integer itemId, Integer amount) {
Map<String, Object> map = new HashMap<>();
map.put("itemId", itemId);
map.put("amount", amount);
Message increase = new Message(topicname, "increase", JSON.toJSONString(map).getBytes(Charset.forName("utf-8")));
try {
producer.send(increase);
} catch (MQClientException e) {
e.printStackTrace();
return false;
} catch (RemotingException e) {
e.printStackTrace();
return false;
} catch (MQBrokerException e) {
e.printStackTrace();
return false;
} catch (InterruptedException e) {
e.printStackTrace();
return false;
}
return true;
}
}