简介
RocketMQ是阿里巴巴开源的消息队列,主要用作削峰,解耦,异步。
本文主要讲如何部署阿里RocketMQ,具体概念请自行百度。
可参考:https://www.jianshu.com/p/2838890f3284
安装
JDK安装
1、安装JDK
2、配置JDK环境变量
3、安装RocketMQ
4、配置RocketMQ环境变量
主要安装过程为以上4步,下面附上linux上安装jdk的流程,windows的自行百度。
在ubuntu中通过sudo apt install openjdk-8-jre-headless命令可直接安装,安装完成后配置环境变量即可。
本文主要讲解手动安装:
1、通过FTP将jdk上传到home目录
2、在linux中切换到/usr目录,并创建java目录,指令1、cd /usr 2、sudo mkdir java
3、在linux中执行cd ~指令切换到home目录
4、home目录下将jdk文件复制到/usr/java目录下 sudo cp jdk1.8.0_201.tar.gz /usr/java
5、解压文件sudo tar -zxvf jdk1.8.0_201.tar.gz
6、配置环境变量sudo vim /etc/profile,在最底部加上如下命令
export JAVA_HOME=/usr/java/jdk1.8.0_181
export JRE_HOME=/usr/java/jdk1.8.0_181/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
运行java -version查看是否安装成功
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
【linux上安装jdk】https://blog.csdn.net/u010648921/article/details/82624347
安装RocketMQ
1、在home目录下创建RocketMQ目录 mkdir RocketMQ
2、先通过FTP将rocketmq-all-4.2.0-bin-release.zip上传到linux服务器 home目录/RocketMQ目录
3、解压
unzip rocketmq-all-4.2.0-bin-release
4、修改配置文件,
cd ~/RocketMQ/bin
vim runserver.sh
修改内存配置
保存退出
vim runbroker.sh
启动
·1、启动nameserver
nohup ./mqnamesrv &
2、将broker挂载到nameserver,需要在后面指定ip地址,由于是单机测试,所以localhost
nohup sh ./mqbroker -n localhost:9876 &
如果需要指定输出到其他文件,可以修改nohup输出路径,这里自行百度
使用RocketMQ(Java)
package RoketMQ.RoketMQ;
import java.util.List;
import com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer;
import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import com.alibaba.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import com.alibaba.rocketmq.client.producer.DefaultMQProducer;
import com.alibaba.rocketmq.client.producer.SendResult;
import com.alibaba.rocketmq.common.consumer.ConsumeFromWhere;
import com.alibaba.rocketmq.common.message.Message;
import com.alibaba.rocketmq.common.message.MessageExt;
public class App
{
public static void main( String[] args ) throws Exception
{
producerSend();
}
public static void producerSend()throws Exception{
//创建producer,并指定producer所属组名
DefaultMQProducer producer = new DefaultMQProducer("group");
producer.setNamesrvAddr("192.168.80.128:9876");
producer.start();
for (int i = 0; i < 100; i++) {
//第一个参数表示消息类别(便于在broker中分布式管理),第二个参数为消息体
Message msg = new Message("orders", ("order"+i).getBytes());
SendResult result = producer.send(msg);
//System.out.println(result);
//System.out.println(msg + "sended out");
Thread.sleep(500);
}
producer.shutdown();
}
}
package RoketMQ.RoketMQ;
import java.util.List;
import com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer;
import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import com.alibaba.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import com.alibaba.rocketmq.common.consumer.ConsumeFromWhere;
import com.alibaba.rocketmq.common.message.Message;
import com.alibaba.rocketmq.common.message.MessageExt;
public class ConsumerTest {
public static void main(String[] args) throws Exception {
consumerPush();
}
//推模式(观察者模式),Broker主动将消息推送给客户端,需要将监听器挂载在broker
public static void consumerPush() throws Exception{
//创建consumer并加入名为consumer的组
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumers");
consumer.setNamesrvAddr("192.168.80.128:9876");
//第一个参数为消息类别,有produer定义,第二个参数为标签,一般为orderId
consumer.subscribe("orders", null);
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
//创建监听器
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list,
ConsumeConcurrentlyContext context) {
Message msg = list.get(0); //获取消息
System.out.println(new String(msg.getBody()));
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
}
//拉模式,主动去broker中拉数据
public static void consumerPull(){
}
}
同时启动两个程序后输出结果