消息队列:SpringBoot集成RocketMQ的那些坑(真实有效、附源码)

技术不更新的坑

本着一颗爱自由、爱技术的心,不断在探索技术的路上前进,可是总是有一些坑是需要不断的去踩,去做一些改变来适应这个技术发展飞快的时代。
我用上了SpringBoot2.0+和JDK10。这都是比较新的技术,迟早要踩坑的。在升级了框架后,要更新使用的RocketMQ,那么问题就来了,各种问题层出不穷,好在我都一一解决了。值得高兴。

一、SpringBoot2.0+框架

首先你要有一个SpringBoot2.0+框架,这个框架已经出来很久了,如果你还没有用上那么你的技术确实需要更新了。
怎么下载使用这个框架,我在这里就不多说了,相信看到这个帖子的多少都是已经有了基础的。

二、RocketMQ代码

其实Apache官方,已经给我们提供了rocketmq-spring-boot-starter给大家直接集成到SpringBoot框架中。
广泛给出的地址:rocketmq-spring-boot-starter详情

在这个页面,有几点特别需要说明。

三、Apache埋的坑

1、关于pom.xml文件的引用

如下图
这里写图片描述

<!--在pom.xml中添加依赖-->
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>spring-boot-starter-rocketmq</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</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)

扫描二维码关注公众号,回复: 2892822 查看本文章
$ 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建议暂时先不改。最小的改动,能够成功就好了,免得出现其他的问题。

这里写图片描述

打包成功,发到私服。

这里写图片描述

然后再在项目中引用你自己私服的项目。

<!-- RocketMQ止-->
        <!--在pom.xml中添加依赖-->
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>spring-boot-starter-rocketmq</artifactId>
            <version>1.0.0</version>
        </dependency>

        <!--下面建议也引用,不然会出现各种问题-->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-messaging -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-messaging</artifactId>
            <version>5.0.8.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-client -->
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-client</artifactId>
            <version>4.2.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.6</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-configuration-processor -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <version>2.0.4.RELEASE</version>
        </dependency>
        <!-- RocketMQ止-->

2、关于spring.rocketmq.name-server的坑

看下图:
这里写图片描述

注意:
如果你是SpringBoot2.0+的框架,或者是JDK10。
你需要将你自己的项目配置文件中的,spring.rocketmq.name-server改成
spring.rocketmq.nameServer。注意是nameServer
不然就会报各种稀奇古怪的bug。

3、关于启动报内存不足的错

在安装启动Name ServerBroker的时候,一定要修改配置文件,不然内存会爆炸。

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"

四、下面提供源码

1.spring-boot-starter-rocketmq

rocketmq-externals项目下有spring-boot-starter-rocketmq

2.生产者

生产者源码:源码下载地址

3.消费者源码

消费者源码:源码下载地址

五、成功效果图

1、首先要确保Name ServerBroker是启动态

这里写图片描述

然后启动生产者,启动消费者,就可以之间互相发消息!

好啦。成功效果图,我下次继续更新!
祝大家都能成功!

猜你喜欢

转载自blog.csdn.net/wd2014610/article/details/81781109