首页 > 其他分享 >solon 集成 rocketmq5 sdk

solon 集成 rocketmq5 sdk

时间:2024-12-09 09:24:13浏览次数:7  
标签:solon producer 配置 private public rocketmq5 sdk

使用 rocketmq5 是比较简单的事情。也有些同学对 sdk 原始接口会陌生,会希望有个集成的示例。

<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client-java</artifactId>
    <version>${rocketmq5.version}</version>
</dependency>

完整的集成代码参考:

https://gitee.com/opensolon/solon-examples/tree/main/b.Integration/demoB002-rocketmq5

希望更加简化使用的同学,可以使用:

rocketmq5-solon-cloud-plugin (但定制性会变差)

1、看看配置怎么搞?

使用 Solon 初始器 生成一个 Solon Web 模板项目,然后添加上面的 rocketmq5 依赖。

  • 添加 yml 配置(具体的配置属性,参考:ClientConfigurationBuilder,ProducerBuilder, PushConsumerBuilder)
solon.app:
  name: "demo-app"
  group: "demo"

solon.logging:
  logger:
    root:
      level: INFO

# 配置可以自由定义,与 @Bean 代码对应起来即可(以下为参考)
solon.rocketmq:
  properties:  #公共配置(配置项,参考:ClientConfigurationBuilder)
    endpoints: "127.0.0.1:8081"
    sessionCredentialsProvider:
      "@type": "demoB002.SessionCredentialsProviderImpl" # solon 支持 "@type" 类型申明当前配置节的实例类型
      accessKey: "xxx"
      accessSecret: "xxx"
      securityToken: "xxx"
    requestTimeout: "10s"
  producer: #生产者专属配置(配置项,参考:ProducerBuilder)
    maxAttempts: 3
  consumer: #消费者专属配置(配置项,参考:PushConsumerBuilder)
    consumerGroup: "${solon.app.group}_${solon.app.name}"
    consumptionThreadCount: 2
    maxCacheMessageCount: 1
    maxCacheMessageSizeInBytes: 1
  • 添加 java 配置器
@Configuration
public class RocketmqConfig {
    private ClientServiceProvider clientProvider = ClientServiceProvider.loadService();
    
    @Bean
    public ClientConfiguration client(@Inject("${solon.rocketmq.properties}") Properties common){
        ClientConfigurationBuilder builder = ClientConfiguration.newBuilder();
        //注入属性
        Utils.injectProperties(builder, common);

        return builder.build();
    }

    @Bean
    public Producer producer(@Inject("${solon.rocketmq.producer}") Properties producer,
                             ClientConfiguration clientConfiguration) throws ClientException {
        ProducerBuilder producerBuilder = clientProvider.newProducerBuilder();

        //注入属性
        if (producer.size() > 0) {
            Utils.injectProperties(producerBuilder, producer);
        }

        producerBuilder.setClientConfiguration(clientConfiguration);

        return producerBuilder.build();
    }

    @Bean
    public PushConsumer consumer(@Inject("${solon.rocketmq.consumer}") Properties consumer,
                                 ClientConfiguration clientConfiguration,
                                 MessageListener messageListener) throws ClientException{

        //按需选择 PushConsumerBuilder 或 SimpleConsumerBuilder
        PushConsumerBuilder consumerBuilder = clientProvider.newPushConsumerBuilder();

        //注入属性
        Utils.injectProperties(consumerBuilder, consumer);

        Map<String, FilterExpression> subscriptionExpressions = new HashMap<>();
        subscriptionExpressions.put("topic.test",  new FilterExpression("*"));

        consumerBuilder.setSubscriptionExpressions(subscriptionExpressions);
        consumerBuilder.setClientConfiguration(clientConfiguration);
        consumerBuilder.setMessageListener(messageListener);

        return consumerBuilder.build();
    }
}

//这个实现类,(相对于 StaticSessionCredentialsProvider)方便配置自动注入
public class SessionCredentialsProviderImpl implements SessionCredentialsProvider {
    private String accessKey;
    private String accessSecret;
    private String securityToken;

    private SessionCredentials sessionCredentials;

    @Override
    public SessionCredentials getSessionCredentials() {
        if (sessionCredentials == null) {
            if (securityToken == null) {
                sessionCredentials = new SessionCredentials(accessKey, accessSecret);
            } else {
                sessionCredentials = new SessionCredentials(accessKey, accessSecret, securityToken);
            }
        }

        return sessionCredentials;
    }
}

2、代码应用

  • 发送(或生产),这里代控制器由用户请求再发送消息(仅供参考):
@Controller
public class DemoController {
    @Inject
    private Producer producer;

    @Mapping("/send")
    public void send(String msg) throws ClientException {
        //发送
        producer.send(new MessageBuilderImpl()
                .setTopic("topic.test")
                .setBody(msg.getBytes())
                .build());
    }
}
  • 监听(或消费),这里采用订阅回调的方式:(仅供参考)
@Component
public class DemoMessageListener implements MessageListener {

    @Override
    public ConsumeResult consume(MessageView messageView) {
        System.out.println(messageView);

        return ConsumeResult.SUCCESS;
    }
}

标签:solon,producer,配置,private,public,rocketmq5,sdk
From: https://www.cnblogs.com/noear/p/18594202

相关文章

  • 打开.net8.0版本项目时提示“找不到指定的 SDK“Microsoft.NET.Sdk”的解决办法
    排查解决方法:1. 确保已安装 .NET SDK:可以通过运行以下命令来检查已安装的SDK 版本:dotnet--list-sdks结果:列表中存在.net8.0版本,此处正常。2.检查项目文件:打开项目的 .csproj 文件,确保 <ProjectSdk="Microsoft.NET.Sdk"> 行存在且没有拼写错误。......
  • CAD格式转换二选一:HOOPS Exchange SDK 24.7
    CADExchangerSDK3.24.0HomeProductsCADExchangerSDKSoftwareLibrariestoRead,WriteandVisualize3DCADfilesQuicklyandeasilyenrichyourweb,serverordesktopappwithaccesstoCADandBIMdata.WorkwithCATIA,SOLIDWORKS,Creo,STEP,JT,IFC......
  • solon 集成 kafka-clientsP9
    使用kafka-clients原本是比较简单的事情。但有些同学习惯了spring-kafka后,对原始java接口会陌生些。会希望有个集成的示例。<dependency><groupId>org.apache.kafkagroupId><artifactId>kafka-clientsartifactId><version>${kafka.version}version>depende......
  • solon 集成 kafka-clients
    使用kafka-clients原本是比较简单的事情。但有些同学习惯了spring-kafka后,对原始java接口会陌生些。会希望有个集成的示例。<dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>${kafka.version}</version&g......
  • 12.6百度机器翻译SDK实验
    实验一名称:百度机器翻译SDK实验(2024.11.15日完成)实验要求  任务一:下载配置百度翻译Java相关库及环境(占10%)。    任务二:了解百度翻译相关功能并进行总结,包括文本翻译-通用版和文本翻译-词典版(占20%)。    任务三:完成百度翻译相关功能代码并测试调用,要求可以实现中文......
  • 12.7百度图像增强与特效SDK实验
    实验二名称:百度图像增强与特效SDK实验(2024.11.22日完成)一、实验要求  任务一:下载配置百度图像增强与特效的Java相关库及环境(占10%)。    任务二:了解百度图像增强与特效相关功能并进行总结(占20%)。    任务三:完成图像增强GUI相关功能代码并测试调用,要求上传自己的模糊......
  • Delphi对接微信人脸支付Windows SDK
    开发环境DelphiXE11.3只有部分代码,做个笔记;这个只有调人脸识别(WindowsSDK)代码,只有部分代码 {微信刷脸支付}unitUWX_PayFaceSDK;interfaceusesSystem.SysUtils,System.DateUtils,System.JSON;typemWX_PayFace_CMD_Type=(mWX_init,mWX_getRawdata,mWX......
  • 一个开源且全面的 C# 版微信 SDK
    前言对接和开发过微信相关API(如:微信公众号开发、微信小程序、微信支付)的同学都知道,微信提供了非常多的接口供开发者使用和对接。其实对接接口谁都知道没啥难度,但是看文档费劲且费时间。因此找到一款封装完善且全面的SDK这能够大大的简化我们的开发难度和提高工作效率,今天给大......
  • 录音功能iosSDK
    //// Fast.swift// FastSwiftKit//// CreatedbyXXon2023/9/7.// importAVFoundation publicclassFastAudioManager{     publicstaticletshared=FastAudioManager()     //MARK:音频录制  privatevaraudioRecorder:A......
  • 精品:HOOPS Exchange SDK 2024.8.0
    领先的CAD导入和导出库使用HOOPSExchangeSDK进行CAD数据转换,将30多种CAD文件格式导入您的应用程序,通过单一API即可快速准确地读取和写入2D和3DCAD文件格式,包括CATIA®、SOLIDWORKS®、Inventor™、Revit™、Creo®、NX™、SolidEdge®等。快速准确的C......