跳至主要內容

消息队列MQ组件

大约 3 分钟

消息队列MQ组件

介绍

FastChar核心组件,FastChar默认集成了 RabbitMQ Redisson RocketMQ 消息队列功能, 开发可以根据自身情况选择消息队列使用的解决方案。

使用

开发者可以通过 FastChar.getMQ() 方法快速便捷的使用消息队列功能。如下:


//开启监听,通道为Test
FastChar.getMQ().receive("Test", new IFastMessageQueue.OnReceive() {
    @Override
    public void onMessage(String channel, String message, IFastMessageQueue.AckHandler ackHandler) {
        System.out.println("收到消息:" + channel + "//" + message);
        
        //应答消息
        ackHandler.ack();
    }
});

//发送一个消息,通道为:Test
 FastChar.getMQ().send("Test", "你在干嘛111332222222333!");

使用RabbitMQ作为消息队列

如果开发者需要使用 RabbitMQopen in new window 消息队列,只要在项目中引用相应的客户端包即可。以maven项目为例,在pom.xml中加入如下引用:

<!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>5.18.0</version>
</dependency>

RabbitMQ配置

开发者需要手动配置RabbitMQ的服务器地址和账户密码等信息。如下:

  • 配置类 FastRabbitMQConfig
public class FastCharTestWeb implements IFastWeb {
    /**
     * web启动初始化
     * @param engine
     */
    @Override
    public void onInit(FastEngine engine) throws Exception {
        
        //配置RabbitMQ地址相关信息
        engine.getConfig(FastRabbitMQConfig.class)
                .setHost("localhost")
                .setUsername("test")
                .setPassword("test")
                .setVirtualHost("javaHost");
        
        /**此处省略其他配置代码**/
    }
     /**此处省略其他代码**/
}

说明

完成RabbitMQ配置后,即可使用消息队列功能。

使用Redisson作为消息队列

如果开发者需要使用 Redissonopen in new window 消息队列,只要在项目中引用相应的客户端包即可。以maven项目为例,在pom.xml中加入如下引用:

<!-- https://mvnrepository.com/artifact/org.redisson/redisson -->
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.23.2</version>
</dependency>

Redisson配置

由于 Redisson 是基于Redis实现消息队列,所以开发者需要手动配置Redis的服务器地址和账户密码等信息。如下:

  • 配置类 FastRedisConfig
public class FastCharTestWeb implements IFastWeb {
    /**
     * web启动初始化
     * @param engine
     */
    @Override
    public void onInit(FastEngine engine) throws Exception {
        
        //配置Redis地址相关信息
         engine.getConfig(FastRedisConfig.class)
                .addServer("localhost", 6379);
        
        /**此处省略其他配置代码**/
    }
     /**此处省略其他代码**/
}

更多配置,请查看Redis配置

说明

完成Redisson配置后,即可使用消息队列功能。

使用RocketMQ作为消息队列

如果开发者需要使用 RocketMQopen in new window 消息队列,只要在项目中引用相应的客户端包即可。以maven项目为例,在pom.xml中加入如下引用:

<!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-client-java -->
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client-java</artifactId>
    <version>5.0.5</version>
</dependency>

RocketMQ配置

开发者需要手动配置RocketMQ的服务器地址和账户密码等信息。如下:

  • 配置类 FastRocketMQConfig
public class FastCharTestWeb implements IFastWeb {
    /**
     * web启动初始化
     * @param engine
     */
    @Override
    public void onInit(FastEngine engine) throws Exception {
        
        //配置RocketMQ地址相关信息
        engine.getConfig(FastRocketMQConfig.class)
                .setAccessKey("V9f*****L7n")
                .setAccessSecret("A96t62***8pw0mb")
                .setEndpoints("rmq-cn-4xl3clh840c.cn-****.rmq.aliyuncs.com:8080")
                .setGroup("TestGroup")
                .setTopic("TestTopic");
        
        /**此处省略其他配置代码**/
    }
     /**此处省略其他代码**/
}

说明

完成RabbitMQ配置后,即可使用消息队列功能。

优先级

如果RabbitMQ、Redisson和RocketMQ的相关jar包都存在项目中

FastChar 选择的优先级为:RocketMQ > RabbitMQ > Redisson

注意

RocketMQ、RabbitMQ和Redisson的相关jar包必须只能引用其中一个,避免操作cache异常!

自定义实现消息队列

开发者可以实现 IFastMessageQueue 接口 自定义实现消息队列处理。然后将实现的类注册到代理器中即可!