阿里消息队列RocketMQ简单部署

简介

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(){    	
    }
}

同时启动两个程序后输出结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_25956141/article/details/88605724