本着一颗爱自由、爱技术的心,不断在探索技术的路上前进,可是总是有一些坑是需要不断的去踩,去做一些改变来适应这个技术发展飞快的时代。
我用上了SpringBoot2.0+和JDK10。这都是比较新的技术,迟早要踩坑的。在升级了框架后,要更新使用的RocketMQ,那么问题就来了,各种问题层出不穷,好在我都一一解决了。值得高兴。
首先你要有一个SpringBoot2.0+框架,这个框架已经出来很久了,如果你还没有用上那么你的技术确实需要更新了。
怎么下载使用这个框架,我在这里就不多说了,相信看到这个帖子的多少都是已经有了基础的。
其实Apache官方,已经给我们提供了rocketmq-spring-boot-starter
给大家直接集成到SpringBoot框架中。
广泛给出的地址:rocketmq-spring-boot-starter详情
在这个页面,有几点特别需要说明。
<dependency>
<groupId>org.apache.rocketmqgroupId>
<artifactId>spring-boot-starter-rocketmqartifactId>
<version>1.0.0-SNAPSHOTversion>
dependency>
pom无法引用
因为这个Apache并没有把这份代码传到中央仓库。
也就是说这个地方是没有的。
这个时候,你如想要引这个包怎么办呢?需要自己打包,传到私服上去。
你需要先将这份代码下载下来。
在这个代码目录下执行打包操作:
~/Aliyun/rocketmq-externals/rocketmq-spring-boot-starter on master ⌚ 17:44:02
先执行:
mvn clean
再执行:
mvn package -Dmaven.test.skip=true
注意:坑
报错了:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project spring-boot-starter-rocketmq: Fatal error compiling: java.lang.ExceptionInInitializerError: com.sun.tools.javac.code.TypeTags -> [Help 1]
看下自己的Maven配的JDK的版本;(我的是JDK10)
$ mvn -v
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T15:58:13+08:00)
Maven home: /Users/wangdong/Develop/Maven/apache-maven-3.5.2
Java version: 10.0.2, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
Default locale: en_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.13.6", arch: "x86_64", family: "mac"
回去把Pom改一下,把框架升到2.0+重新打包,jdk建议暂时先不改。最小的改动,能够成功就好了,免得出现其他的问题。
打包成功,发到私服。
然后再在项目中引用你自己私服的项目。
<dependency>
<groupId>org.apache.rocketmqgroupId>
<artifactId>spring-boot-starter-rocketmqartifactId>
<version>1.0.0version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-messagingartifactId>
<version>5.0.8.RELEASEversion>
dependency>
<dependency>
<groupId>org.apache.rocketmqgroupId>
<artifactId>rocketmq-clientartifactId>
<version>4.2.0version>
<exclusions>
<exclusion>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.9.6version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-configuration-processorartifactId>
<version>2.0.4.RELEASEversion>
dependency>
spring.rocketmq.name-server
的坑注意:
如果你是SpringBoot2.0+的框架,或者是JDK10。
你需要将你自己的项目配置文件中的,spring.rocketmq.name-server
改成
spring.rocketmq.nameServer
。注意是nameServer
。
不然就会报各种稀奇古怪的bug。
在安装启动Name Server
和Broker
的时候,一定要修改配置文件,不然内存会爆炸。
Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory
将下面的配置文件根据你的需要改
我这里以前默认是Xms4g,都是g,我修改到m就行了。
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
rocketmq-externals项目下有spring-boot-starter-rocketmq
生产者源码:源码下载地址
消费者源码:源码下载地址
Name Server
和Broker
是启动态然后启动生产者,启动消费者,就可以之间互相发消息!
好啦。成功效果图,我下次继续更新!
祝大家都能成功!