本文详细介绍了安装rocketMq 前后的方法和一些注意事项 ,设备为centos7,话不多说,begin。
建议把jdk,maven,git先都装上。
首先需要获取rocketMq的程序,源程序或可执行包都可以,这边直接获取可执行程序。
wget http://www-us.apache.org/dist/rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip
//如果已经有可以解压zip的程序,可省去这一步
yum install zip unzip
//这边可以使用-d指定解压缩的位置
unzip rocketmq-all-4.2.0-bin-release.zip
这样操作的话会在当前目录下生成一个rocketmq的文件夹,进入该文件夹
cd rocketmq
编辑bin目录下的 runserver.sh,runbroker.sh,tools.sh 这三个文件,修改位置分别为
JAVA_OPT="${JAVA_OPT} -server -Xms100m -Xmx100m -Xmn50m -XX:MetaspaceSize=12m -XX:MaxMetaspaceSize=32m"
JAVA_OPT="${JAVA_OPT} -server -Xms100m -Xmx100m -Xmn50m"
JAVA_OPT="${JAVA_OPT} -server -Xms100m -Xmx100m -Xmn25m -XX:PermSize=12m -XX:MaxPermSize=12m"
根据自己的配置酌情设置就行了。
接着开放一下端口,这个是iptables的策略,包括
-A INPUT -p tcp -m state --state NEW -m tcp --dport 9876 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10911 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10909 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
然后重启
service iptables restart
建议把 10910加上,避免不必要的麻烦。一般云主机在控制台都可以直接编辑,如果没有iptables,firewall就自己看着办吧。
nohup sh bin/mqnamesrv &
//之后回车就行了,可以根据提示查看一下nohup.out的输出内容,是否出现成功字样
先配置一下ip,目的是为了可以使用公网ip可以访问到broker。
vim conf/broker.conf
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr=xxxx:9876
brokerIP1=xxxx
启动
//这边的ip可以是localhost,指定本机ip应该也可以
nohup sh bin/mqbroker -n xxxx:9876 autoCreateTopicEnable=true -c conf/broker.conf &
log日志位于~/logs/rocketmqlogs/ 路径下,包括但不限于namesrv.log和broker.log。注意broker日志内容的broker的ip得是公网ip,外部机器才可以访问到。
git clone -b release-rocketmq-console-1.0.0 https://github.com/apache/rocketmq-externals.git
cd rocketmq-externals/rocketmq-console/
vi src/main/resources/application.properties
照着这个改就行了。
#管理后台访问上下文路径,默认为空,如果填写,一定要前面加“/”,后面不要加,否则启动报错
server.contextPath=/rocketmq
#访问端口
server.port=8080
#spring.application.index=true
spring.application.name=rocketmq-console
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
#logback配置文件路径
logging.config=classpath:logback.xml
#if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
#Name Server地址,修改成你自己的服务地址
rocketmq.config.namesrvAddr=xxxx:9876
#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=
#rocketmq-console’s data path:dashboard/monitor
rocketmq.config.dataPath=/tmp/rocketmq-console/data
#set it false if you don’t want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true
没有mvn,自行安装。https://www.cnblogs.com/clicli/p/5866390.html
mvn clean package -Dmaven.test.skip=true
java -jar target/rocketmq-console-ng-1.0.0.jar
启动成功后访问http://localhost:8080/rocketmq就可以了,当然是服务器的ip地址了。
代码我偷的,不会用,主要是拿来先测一下。
//依赖
org.apache.rocketmq
rocketmq-client
4.2.0
com.alibaba.rocketmq
rocketmq-all
3.6.2.Final
pom
//Producer
public class Producer {
public static void main(String[] args) throws MQClientException, InterruptedException {
// 声明并初始化一个producer
// 需要一个producer group名字作为构造方法的参数,这里为producer1
DefaultMQProducer producer = new DefaultMQProducer("producer1");
producer.setVipChannelEnabled(false);
// 设置NameServer地址,此处应改为实际NameServer地址,多个地址之间用;分隔
// NameServer的地址必须有
// producer.setClientIP("xxxx");
// producer.setInstanceName("Producer");
producer.setNamesrvAddr("xxxx:9876");
// 调用start()方法启动一个producer实例
producer.start();
// 发送1条消息到Topic为TopicTest,tag为TagA,消息内容为“Hello RocketMQ”拼接上i的值
try {
// 封装消息
Message msg = new Message("TopicTest",// topic
"TagA",// tag
("Hello RocketMQ").getBytes(RemotingHelper.DEFAULT_CHARSET)// body
);
// 调用producer的send()方法发送消息
// 这里调用的是同步的方式,所以会有返回结果
SendResult sendResult = producer.send(msg);
// 打印返回结果
System.out.println(sendResult);
} catch (RemotingException e) {
e.printStackTrace();
} catch (MQBrokerException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//发送完消息之后,调用shutdown()方法关闭producer
System.out.println("send success");
producer.shutdown();
}
}
//Consumer
public class Consumer {
public static void main(String[] args) throws InterruptedException, MQClientException {
//声明并初始化一个consumer
//需要一个consumer group名字作为构造方法的参数,这里为consumer1
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer1");
//consumer.setVipChannelEnabled(false);
//同样也要设置NameServer地址
consumer.setNamesrvAddr("xxxx:9876");
//这里设置的是一个consumer的消费策略
//CONSUME_FROM_LAST_OFFSET 默认策略,从该队列最尾开始消费,即跳过历史消息
//CONSUME_FROM_FIRST_OFFSET 从队列最开始开始消费,即历史消息(还储存在broker的)全部消费一遍
//CONSUME_FROM_TIMESTAMP 从某个时间点开始消费,和setConsumeTimestamp()配合使用,默认是半个小时以前
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
//设置consumer所订阅的Topic和Tag,*代表全部的Tag
consumer.subscribe("TopicTest", "*");
//设置一个Listener,主要进行消息的逻辑处理
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List msgs,
ConsumeConcurrentlyContext context) {
System.out.println(Thread.currentThread().getName() + " Receive New Messages: " + msgs);
System.out.println("----------------------------------------------------------------------------------");
//返回消费状态
//CONSUME_SUCCESS 消费成功
//RECONSUME_LATER 消费失败,需要稍后重新消费
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
//调用start()方法启动consumer
consumer.start();
System.out.println("Consumer Started.");
}
}
---------------------
作者:innerpeacez
来源:CSDN
原文:https://blog.csdn.net/zhwyj1019/article/details/80264698
版权声明:本文为博主原创文章,转载请附上博文链接!
先启动哪个程序不用我多说了8。
主要还欠缺控制台的权限验证和绑定消费者时的权限验证。之后可以扩展多个nameserver保证可用性,扩展broker尝试负载均衡。