rocketMq单机搭建+代码实战

1.需要的环境

64bit OS, Linux/Unix/Mac is recommended;

64bit JDK 1.8+; 查看方式: java -version

Maven 3.2.x; 查看方式: mvn -v

2.下载压缩包zip

https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.3.0/rocketmq-all-4.3.0-source-release.zip

3.创建rocketmq目录+编译,

把下载的zip文件放进去

unzip rocketmq-all-4.3.0-source-release.zip

cd rocketmq-all-4.3.0/

mvn -Prelease-all -DskipTests clean install -U

cd distribution/target/apache-rocketmq

4.开启nameserver

     nohup sh bin/mqnamesrv &

5.开启brokerserver

     nohup sh bin/mqbroker -n localhost:9876 autoCreateTopicEnable=true &

6.测试发送信息

     1. export NAMESRV_ADDR=localhost:9876

     2. sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

          SendResult [sendStatus=SEND_OK, msgId= ...

     3. sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

          ConsumeMessageThread_%d Receive New Messages: [MessageExt...

7.关闭服务

sh bin/mqshutdown broker

sh bin/mqshutdown namesrv

8.代码实战

生产者

import org.apache.rocketmq.client.producer.DefaultMQProducer;

import org.apache.rocketmq.client.producer.SendResult;

import org.apache.rocketmq.common.message.Message;

import org.apache.rocketmq.remoting.common.RemotingHelper;

 

public class TestProducerZk {

public static void main(String[] args) {

 

try{

DefaultMQProducer producer = new

DefaultMQProducer("testGroup");

producer.setNamesrvAddr("localhost:9876");

//Launch the instance.

producer.start();

for (int i = 0; i < 6; i++) {

//Create a message instance, specifying topic, tag , key and message body.

Message msg = new Message("TopicTest" ,

"TagA" , String.valueOf(i),

("Hello RocketMQ " +

i).getBytes(RemotingHelper.DEFAULT_CHARSET)

);

SendResult sendResult = producer.send(msg);

System.out.printf("%s%n", sendResult);

}

producer.shutdown();

}catch (Exception e){

e.printStackTrace();

}

}

}

消费者

import com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer;

import com.alibaba.rocketmq.client.exception.MQClientException;

import com.alibaba.rocketmq.common.consumer.ConsumeFromWhere;

import.MqMessageListenerTest;

 

public class TestConsumerZk {

public static void main(String[] args) throws MQClientException {

String consumerGroupId = "mq_consumer_v001";

String serverIpPort = "localhost:9876";

String mqTopic = "TopicTest";

DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroupId);

consumer.setNamesrvAddr(serverIpPort);

consumer.subscribe(mqTopic, "*");

consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);

consumer.setConsumeMessageBatchMaxSize(1);

MqMessageListenerTest mqMessageListener = new MqMessageListenerTest();

consumer.registerMessageListener(mqMessageListener);

consumer.start();

System.out.println("Consumer Started.");

}

}

 

import com.alibaba.rocketmq.client.consumer.listener.ConsumeOrderlyContext;

import com.alibaba.rocketmq.client.consumer.listener.ConsumeOrderlyStatus;

import com.alibaba.rocketmq.client.consumer.listener.MessageListenerOrderly;

import com.alibaba.rocketmq.common.message.MessageExt;

import java.util.List;

 

public class MqMessageListenerTest implements MessageListenerOrderly {

@Override

public ConsumeOrderlyStatus consumeMessage(List<MessageExt> msgs, ConsumeOrderlyContext context) {

if(msgs.size() == 0){

return ConsumeOrderlyStatus.SUCCESS;

}

try {

for (MessageExt msg : msgs) {

String keys = msg.getKeys();

String mqTopic = msg.getTopic();

String body = "keys is " + keys + " ,mqTopic is " + mqTopic + " ,body is " + new String( msg.getBody());

System.out.println(body);

}

} catch (Exception e) {

e.printStackTrace();

// 消费异常 消费者会立马重新消费这条消息

return ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT;

}

// 非主动提交的时候,SUCCESS不会导致队列消息提交,消息未提交就可以被循环消费

return ConsumeOrderlyStatus.SUCCESS;

}

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值