在Linux上安装RocketMQ...由于这次我装好了,下次重新装的时候再上图
基本上参考官方文档,复制粘贴指令即可完成
一、在阿里云ECS服务器上部署RocketMQ
1.从官网上下载最新的RocketMQ:http://rocketmq.apache.org/docs/quick-start/
写这篇文章时我下载的是4.4.0
> unzip rocketmq-all-4.4.0-source-release.zip
> cd rocketmq-all-4.4.0/
> mvn -Prelease-all -DskipTests clean install -U
> cd distribution/target/apache-rocketmq
安装完后要在 apache-rocketmq/bin文件夹中修改runborker.sh和runserver.sh的配置,把分配的内存改小一点
参考下图修改runborker.sh
参考下图修改runserver.sh
修改broker.conf ,在最后添加:brokerIP1=你的ECS服务器的公网ip
启动broker指令:
nohup sh bin/mqbroker -n localhost:9876 -c ./conf/broker.conf
x、添加依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.4.0</version>
</dependency>
注意:依赖中的版本号要和当前使用的RocketMQ服务版本要一致,否则无法自动创建topic
x、项目结构
x、代码
1. JmsConfig.class:手动抽取的一个配置类
public class JmsConfig {
public static final String producerGroup = "ppapgro11u1p";
public static final String nameServerAddr = "120.78.152.168:9876";
public static final String topic = "aiden_topic";
}
2. PayProducer.class:生产者类,消息的生产者,用来发送消息
@Component
public class PayProducer {
private DefaultMQProducer producer;
public PayProducer() {
producer = new DefaultMQProducer(JmsConfig.producerGroup);
//this.nameServerAddr = nameServerAddr;
producer.setNamesrvAddr(JmsConfig.nameServerAddr);
start();
}
/**
* 对象在使用之前必须调用一次,只 能初始化一次
*/
public void start() {
try {
this.producer.start();
} catch (MQClientException e) {
e.printStackTrace();
}
}
/**
* 一般在应用上下文,使用上下文监听器,进行关闭
*/
public void shutdown() {
this.producer.shutdown();
}
public DefaultMQProducer getProducer() {
return producer;
}
public void setProducer(DefaultMQProducer producer) {
this.producer = producer;
}
}
3. 消费者类,消息的消费者,用于接收、处理消息
@Component
public class PayConsumer {
private DefaultMQPushConsumer consumer;
private String consumerGroup = "cg";
public PayConsumer() throws MQClientException {
consumer = new DefaultMQPushConsumer(consumerGroup);
consumer.setNamesrvAddr(JmsConfig.nameServerAddr);
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
consumer.subscribe(JmsConfig.topic, "*");
/*consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {
try {
Message msg = msgs.get(0);
System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), new String(msgs.get(0).getBody()));
String topic = msg.getTopic();
String body = new String(msg.getBody(), StandardCharsets.UTF_8);
String tags = msg.getTags();
String keys = msg.getKeys();
System.out.println("topic=" + topic + ",tags=" + tags + ",keys=" + keys + ",msg=" + body);
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
} catch (Exception e) {
e.printStackTrace();
return ConsumeConcurrentlyStatus.RECONSUME_LATER;
}
});*/
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
try {
Message msg = msgs.get(0);
System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), new String(msgs.get(0).getBody()));
String topic = msg.getTopic();
String body = new String(msg.getBody(), StandardCharsets.UTF_8);
String tags = msg.getTags();
String keys = msg.getKeys();
System.out.println("topic=" + topic + ",tags=" + tags + ",keys=" + keys + ",msg=" + body);
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
} catch (Exception e) {
e.printStackTrace();
return ConsumeConcurrentlyStatus.RECONSUME_LATER;
}
}
});
consumer.start();
System.out.println("consumer start");
}
}