rocketmq 客户端消息生产消费Demo测试

02)消息中间件(分布式消息队列)RocketMQ使用,java client demo 消息中间件(分布式消息队列)RocketMQ使用,java client demo 阅读详情

rocketmqdemo测试

1.创建工程引入maven依赖

服务端使用的4.9.1,java客户端使用4.5.0的包

    <dependencies>
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-client</artifactId>
            <version>4.5.0</version>
        </dependency>
    </dependencies>

2.消息生产者

1.创建消息生产者producer,并制定生产者组名
2.指定Nameserver地址
3.启动producer
4.创建消息对象,指定主题Topic、Tag和消息体
5.发送消息
6.关闭生产者producer

3.消息消费者

1.创建消费者Consumer,制定消费者组名
2.指定Nameserver地址
3.订阅主题Topic和Tag
4.设置回调函数,处理消息
5.启动消费者consumer

消息发送

1.发送同步消息

package com.test.mq.rocketmq.base.producer;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.protocol.body.ProducerConnection;
import org.apache.rocketmq.remoting.common.RemotingHelper;

import java.util.concurrent.TimeUnit;

/**
 * 发送同步消息
 **/
public class SyncProducer {
//1.创建消息生产者producer,并制定生产者组名
//2.指定Nameserver地址
//3.启动producer
//4.创建消息对象,指定主题Topic、Tag和消息体
//5.发送消息
//6.关闭生产者producer
    public static void main(String[] args) throws Exception {
        // 实例化消息生产者Producer
        DefaultMQProducer producer = new DefaultMQProducer("group1");
        // 设置NameServer的地址
        producer.setNamesrvAddr("10.211.55.10:9876;10.211.55.8:9876");
        producer.setSendMsgTimeout(6000);
        // 启动Producer实例
        producer.start();
        for (int i = 0; i < 10; i++) {
            // 创建消息,并指定Topic,Tag和消息体
            Message msg = new Message("TopicTest" /* Topic */,
                    "TagB" /* Tag */,
                    ("Hello RocketMQHJW " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
            );
            // 发送消息到一个Broker
            SendResult sendResult = producer.send(msg);
            // 通过sendResult返回消息是否成功送达
            System.out.printf("%s%n", sendResult);
            Thread.sleep(1000);
//            TimeUnit.SECONDS.sleep(10);
        }
        // 如果不再发送消息,关闭Producer实例。
        producer.shutdown();
    }
}

其中遇到的问题会有同步发送消息超时,解决方案,设置一下java客户端发送消息超时时间
https://blog.youkuaiyun.com/qq_16241519/article/details/103926356
在这里插入图片描述
发送消息的返回值如下情况,显示了消息发送在哪个broker下
在这里插入图片描述

2.发送异步消息

和发送同步消息基本一样,只是在producer.send的时候写入返回如果成功或者异常的时候如何处理

package com.test.mq.rocketmq.base.producer;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;

/**
 * 发送异步消息
 **/
public class AsyncProducer {
    public static void main(String[] args) throws Exception {
        // 实例化消息生产者Producer
        DefaultMQProducer producer = new DefaultMQProducer("group2");
        // 设置NameServer的地址
        producer.setNamesrvAddr("10.211.55.10:9876;10.211.55.8:9876");
        producer.setSendMsgTimeout(6000);
        // 启动Producer实例
        producer.start();
//        producer.setRetryTimesWhenSendAsyncFailed(0);
        for (int i = 0; i < 10; i++) {
            final int index = i;
            // 创建消息,并指定Topic,Tag和消息体
            Message msg = new Message("TopicTest",
                    "TagB",
                    "Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET));
            // SendCallback接收异步返回结果的回调
            producer.send(msg, new SendCallback() {
                public void onSuccess(SendResult sendResult) {
                    System.out.printf("%-10d OK %s %n", index,
                            sendResult.getMsgId());
                }
                public void onException(Throwable e) {
                    System.out.printf("%-10d Exception %s %n", index, e);
                    e.printStackTrace();
                }

            });
            Thread.sleep(1000);

        }
        // 如果不再发送消息,关闭Producer实例。
        producer.shutdown();
    }
}

发送结果如下
在这里插入图片描述

3.发送单向消息

如果生产者不关心消息发送是否成功失败的情况可以使用,例如发送日志

package com.test.mq.rocketmq.base.producer;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;

/**
 * 发送单向消息
 **/
public class OnewayProducer {
    public static void main(String[] args) throws Exception{
        // 实例化消息生产者Producer
        DefaultMQProducer producer = new DefaultMQProducer("group1");
        // 设置NameServer的地址
        producer.setNamesrvAddr("10.211.55.10:9876;10.211.55.8:9876");
        producer.setSendMsgTimeout(6000);
        // 启动Producer实例
        producer.start();
        for (int i = 0; i < 100; i++) {
            // 创建消息,并指定Topic,Tag和消息体
            Message msg = new Message("TopicTest" /* Topic */,
                    "TagA" /* Tag */,
                    ("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
            );
            // 发送单向消息,没有任何返回结果
            producer.sendOneway(msg);
            Thread.sleep(1000);

        }
        // 如果不再发送消息,关闭Producer实例。
        producer.shutdown();
    }
}

消息消费

消费广播模式和负载均衡模式不同

consumer.setMessageModel(MessageModel.BROADCASTING);
consumer.setMessageModel(MessageModel.CLUSTERING);

在这里插入图片描述

1.消息消费负载均衡模式

package com.test.mq.rocketmq.base.consumer;

import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;

import java.util.List;

/**
 * 消息接收者
 **/
public class Consumer {
//1.创建消费者Consumer,制定消费者组名
//2.指定Nameserver地址
//3.订阅主题Topic和Tag
//4.设置回调函数,处理消息
//5.启动消费者consumer
public static void main(String[] args) throws Exception {
    // 实例化消息生产者,指定组名
    DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("group1");
    // 指定Namesrv地址信息.
    consumer.setNamesrvAddr("10.211.55.10:9876;10.211.55.8:9876");
    // 订阅Topic
    consumer.subscribe("TopicTest", "TagB");
    //负载均衡模式消费
    consumer.setMessageModel(MessageModel.CLUSTERING);
    //    consumer.setMessageModel(MessageModel.BROADCASTING);

    // 注册回调函数,处理消息
    consumer.registerMessageListener(new MessageListenerConcurrently() {
        public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
                                                        ConsumeConcurrentlyContext context) {
            System.out.printf("%s Receive New Messages: %s %n",
                    Thread.currentThread().getName(), msgs);
            return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
        }
    });
    //启动消息者
    consumer.start();
    System.out.printf("Consumer Started.%n");
}
}

打印结果
在这里插入图片描述

2.消息消费广播模式

package com.test.mq.rocketmq.base.consumer;

import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;

import java.util.List;

/**
 * 消息接收者 负载均衡模式
 **/
public class Consumer {
//1.创建消费者Consumer,制定消费者组名
//2.指定Nameserver地址
//3.订阅主题Topic和Tag
//4.设置回调函数,处理消息
//5.启动消费者consumer
public static void main(String[] args) throws Exception {
    // 实例化消息生产者,指定组名
    DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("group1");
    // 指定Namesrv地址信息.
    consumer.setNamesrvAddr("10.211.55.10:9876;10.211.55.8:9876");
    // 订阅Topic
    consumer.subscribe("TopicTest", "TagB");
    //负载均衡模式消费
//    consumer.setMessageModel(MessageModel.CLUSTERING);
    consumer.setMessageModel(MessageModel.BROADCASTING);

    // 注册回调函数,处理消息
    consumer.registerMessageListener(new MessageListenerConcurrently() {
        public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
                                                        ConsumeConcurrentlyContext context) {
            System.out.printf("%s Receive New Messages: %s %n",
                    Thread.currentThread().getName(), msgs);
            return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
        }
    });
    //启动消息者
    consumer.start();
    System.out.printf("Consumer Started.%n");
}
}

在这里插入图片描述

顺序消息

在这里插入图片描述

在这里插入图片描述

1.顺序消息生产者

package com.test.mq.rocketmq.order;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.MessageQueueSelector;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageQueue;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @description:顺序消息生产者
 **/
public class Producer {

    public static void main(String[] args) throws Exception {
        DefaultMQProducer producer = new DefaultMQProducer("ordergroup");

        producer.setNamesrvAddr("10.211.55.10:9876;10.211.55.8:9876");
        producer.setSendMsgTimeout(6000);

        producer.start();

        String[] tags = new String[]{"TagA", "TagC", "TagD"};

        // 订单列表
        List<OrderStep> orderList = new Producer().buildOrders();

        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = sdf.format(date);
        for (int i = 0; i < 10; i++) {
            // 加个时间前缀
            String body = dateStr + " Hello RocketMQ " + orderList.get(i);
            Message msg = new Message("OrderTopic", tags[i % tags.length], "KEY" + i, body.getBytes());
            /*
            参数一:消息对象
            参数二:消息队列的选择器
            参数三:选择队列的业务标识(订单id)
            */
            SendResult sendResult = producer.send(msg, new MessageQueueSelector() {
                /*
                * mqs:队列集合
                * msg:消息对象
                * arg:业务标识的参数(订单id)
                * */
                public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {
                    Long id = (Long) arg;  //根据订单id选择发送queue
                    long index = id % mqs.size();
                    return mqs.get((int) index);
                }
            }, orderList.get(i).getOrderId());//订单id

            System.out.println(String.format("SendResult status:%s, queueId:%d, body:%s",
                    sendResult.getSendStatus(),
                    sendResult.getMessageQueue().getQueueId(),
                    body));
        }
        producer.shutdown();
    }

    /**
     * 订单的步骤
     */
    private static class OrderStep {
        private long orderId;
        private String desc;

        public long getOrderId() {
            return orderId;
        }

        public void setOrderId(long orderId) {
            this.orderId = orderId;
        }

        public String getDesc() {
            return desc;
        }

        public void setDesc(String desc) {
            this.desc = desc;
        }

        @Override
        public String toString() {
            return "OrderStep{" +
                    "orderId=" + orderId +
                    ", desc='" + desc + '\'' +
                    '}';
        }
    }

    /**
     * 生成模拟订单数据
     */
    private List<OrderStep> buildOrders() {
        List<OrderStep> orderList = new ArrayList<OrderStep>();

        OrderStep orderDemo = new OrderStep();
        orderDemo.setOrderId(15103111039L);
        orderDemo.setDesc("创建");
        orderList.add(orderDemo);

        orderDemo = new OrderStep();
        orderDemo.setOrderId(15103111065L);
        orderDemo.setDesc("创建");
        orderList.add(orderDemo);

        orderDemo = new OrderStep();
        orderDemo.setOrderId(15103111039L);
        orderDemo.setDesc("付款");
        orderList.add(orderDemo);

        orderDemo = new OrderStep();
        orderDemo.setOrderId(15103117235L);
        orderDemo.setDesc("创建");
        orderList.add(orderDemo);

        orderDemo = new OrderStep();
        orderDemo.setOrderId(15103111065L);
        orderDemo.setDesc("付款");
        orderList.add(orderDemo);

        orderDemo = new OrderStep();
        orderDemo.setOrderId(15103117235L);
        orderDemo.setDesc("付款");
        orderList.add(orderDemo);

        orderDemo = new OrderStep();
        orderDemo.setOrderId(15103111065L);
        orderDemo.setDesc("完成");
        orderList.add(orderDemo);

        orderDemo = new OrderStep();
        orderDemo.setOrderId(15103111039L);
        orderDemo.setDesc("推送");
        orderList.add(orderDemo);

        orderDemo = new OrderStep();
        orderDemo.setOrderId(15103117235L);
        orderDemo.setDesc("完成");
        orderList.add(orderDemo);

        orderDemo = new OrderStep();
        orderDemo.setOrderId(15103111039L);
        orderDemo.setDesc("完成");
        orderList.add(orderDemo);

        return orderList;
    }
}

可以看到每个订单的业务都是在同一个消息队列里面
在这里插入图片描述

2.顺序消息消费者

package com.test.mq.rocketmq.order;

import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.*;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;

import java.util.List;

/**
 * 消息接收者 负载均衡模式
 **/
public class Consumer {
//1.创建消费者Consumer,制定消费者组名
//2.指定Nameserver地址
//3.订阅主题Topic和Tag
//4.设置回调函数,处理消息
//5.启动消费者consumer
public static void main(String[] args) throws Exception {
    // 实例化消息生产者,指定组名
    DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("ordergroup");
    // 指定Namesrv地址信息.
    consumer.setNamesrvAddr("10.211.55.10:9876;10.211.55.8:9876");
    // 订阅Topic
    consumer.subscribe("OrderTopic", "*");
    //负载均衡模式消费
//    consumer.setMessageModel(MessageModel.CLUSTERING);
    consumer.setMessageModel(MessageModel.BROADCASTING);

    // 注册回调函数,处理消息
    consumer.registerMessageListener(new MessageListenerOrderly() {

        public ConsumeOrderlyStatus consumeMessage(List<MessageExt> msgs,
                                                        ConsumeOrderlyContext context) {
            for (MessageExt msg : msgs){
                System.out.println("ThreadName:"+Thread.currentThread().getName()+":Receive New Messages:"+new String(msg.getBody()));
            }
//            System.out.printf("%s Receive New Messages: %s %n",
//                    Thread.currentThread().getName(), msgs);
            return ConsumeOrderlyStatus.SUCCESS;
        }
    });
    //启动消息者
    consumer.start();
    System.out.printf("Consumer Started.%n");
}
}

可以看到每个业务订单的消息都是先创建再付款再推送最后完成
在这里插入图片描述

延时消息

1.延时消息生产者

使用Message msg.setDelayTimeLevel(2) 设置消息延迟时间
使用限制等级从1-18级别具体时间如下

// org/apache/rocketmq/store/config/MessageStoreConfig.java
private String messageDelayLevel = "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h";
    package com.test.mq.rocketmq.deplay;

    import org.apache.rocketmq.client.producer.DefaultMQProducer;
    import org.apache.rocketmq.client.producer.SendResult;
    import org.apache.rocketmq.common.message.Message;
    import org.apache.rocketmq.remoting.common.RemotingHelper;

    /**
     * 发送同步消息
     **/
    public class SyncProducer {
    //1.创建消息生产者producer,并制定生产者组名
    //2.指定Nameserver地址
    //3.启动producer
    //4.创建消息对象,指定主题Topic、Tag和消息体
    //5.发送消息
    //6.关闭生产者producer
        public static void main(String[] args) throws Exception {
            // 实例化消息生产者Producer
            DefaultMQProducer producer = new DefaultMQProducer("group1");
            // 设置NameServer的地址
            producer.setNamesrvAddr("10.211.55.10:9876;10.211.55.8:9876");
            producer.setSendMsgTimeout(6000);
            // 启动Producer实例
            producer.start();
            for (int i = 0; i < 10; i++) {
                // 创建消息,并指定Topic,Tag和消息体
                Message msg = new Message("DelayTopic" /* Topic */,
                        "TagB" /* Tag */,
                        ("Hello RocketMQHJW " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
                );
                msg.setDelayTimeLevel(2);
                // 发送消息到一个Broker
                SendResult sendResult = producer.send(msg);
                // 通过sendResult返回消息是否成功送达
                System.out.printf("%s%n", sendResult);
                Thread.sleep(1000);
    //            TimeUnit.SECONDS.sleep(10);
            }
            // 如果不再发送消息,关闭Producer实例。
            producer.shutdown();
        }
    }

2.延时消息消费者

package com.test.mq.rocketmq.deplay;

import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;

import java.util.List;

/**
 * 消息接收者 顺序消息消费者
 **/
public class Consumer {
//1.创建消费者Consumer,制定消费者组名
//2.指定Nameserver地址
//3.订阅主题Topic和Tag
//4.设置回调函数,处理消息
//5.启动消费者consumer
public static void main(String[] args) throws Exception {
    // 实例化消息生产者,指定组名
    DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("ordergroup");
    // 指定Namesrv地址信息.
    consumer.setNamesrvAddr("10.211.55.10:9876;10.211.55.8:9876");
    // 订阅Topic
    consumer.subscribe("DelayTopic", "*");
    //负载均衡模式消费
//    consumer.setMessageModel(MessageModel.CLUSTERING);
    consumer.setMessageModel(MessageModel.BROADCASTING);

    // 注册回调函数,处理消息
    consumer.registerMessageListener(new MessageListenerConcurrently() {
        public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
            for (MessageExt msg : msgs){
                System.out.println("ThreadName:"+Thread.currentThread().getName()+":Receive New Messages:"+new String(msg.getBody())+"延迟时间:"+(System.currentTimeMillis()-msg.getStoreTimestamp()));
            }
//            System.out.printf("%s Receive New Messages: %s %n",
//                    Thread.currentThread().getName(), msgs);
            return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
        }
    });

//    consumer.registerMessageListener(new MessageListenerOrderly() {
//        public ConsumeOrderlyStatus consumeMessage(List<MessageExt> msgs, ConsumeOrderlyContext consumeOrderlyContext) {
//            for (MessageExt msg : msgs){
//                System.out.println("ThreadName:"+Thread.currentThread().getName()+":Receive New Messages:"+new String(msg.getBody()));
//            }
////            System.out.printf("%s Receive New Messages: %s %n",
////                    Thread.currentThread().getName(), msgs);
//            return ConsumeOrderlyStatus.SUCCESS;
//        }
//
//    });
    //启动消息者
    consumer.start();
    System.out.printf("Consumer Started.%n");
}
}

在这里插入图片描述

批量消息

RocketMq的简单demo 首先要确定RocketMq安装成功,环境配置ok,并且启动了。 参考:Rocketmq安装与环境配置_小小舍的博客-优快云博客 依赖: <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.3.0< 阅读详情

相关推荐

RocketMQ的事务消息的原理介绍和demo使用

事务消息只和生产者有关系,和消费者没有太大的关系, 事务复杂流程 订单系统生产者通过RocketMQ发送消息给消费者 1.首先会把我们在代码中发的普通消息转成一个half消息,这个half对消费者是不可见的. 2.RocketMQ会返回half消息接收的结果 3.订单系统接收到了half消息结果之后会去执行一个本地事务,就是执行executeLocalTransaction方法 4.订单系统向RocketMQ返回一个状态,状态包括commit,rollback,unknown 三种状态, 如果是commi

张俊杰 的博客 2017

RocketMQ 三种发消息的方式

本文主要 使用 RocketMQ-Spring 封装提供的RocketMQTemplate,实现三种(同步、异步、oneway)发送消息的方式。 1、引入pom.xml 依赖 <!-- 实现对 RocketMQ 的自动化配置 --> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactI..

Hebe 6328

Docker部署RocketMQ+SpringBoot整合RocketMQ(详细教程)

本文讲解了 RockerMQ 相关分布式详细队列理念,还有 将 RocketMQ 进行Docker容器化部署相关内容,最后还实现了SpringBoot 整合 RockerMQ。感兴趣的小伙伴可以看看,别忘了三连哦!谢谢!

阿木木AEcru的博客 2395

rocketmq本地demo搭建

rocket本地demo搭建

qishiheyongshi的专栏 2421

RocketMQ视频笔记第二章RocketMQ与重复消费

RocketMQ提供了发送多种发送消息的模式,例如同步消息,异步消息,顺序消息,延迟消息,事务消息等,我们一一学习。

Java___interview的博客 601

Ubuntu22.04下RocketMQ-CPP 2.2.0从编译到实战:5分钟搞定生产消费Demo

本文详细介绍了在Ubuntu22.04环境下快速编译和部署RocketMQ-CPP 2.2.0的全过程,包括环境准备、源码编译、生产者和消费者的开发实战。通过5分钟的快速搭建和代码演示,帮助开发者掌握RocketMQ-CPP的核心应用,适用于分布式系统架构中的消息队列场景。

weixin_30790841的博客 236

springboot 使用RocketMQ客户端生产消费消息DEMO

RocketMQ客户端生产消费消息DEMO

Yweir的博客 1166

rocketmq测试用例

rocketmq测试用例

SpringBoot整合rocketmq客户端集群,自定义生产者和消费者实例

简介  RocketMQ,是阿里巴巴自研消息中间件产品,使用它有两种方式:  自行搭建rocketmq集群,然后创建rocketmq启动包、生产者和消费者,进行消息推送和消费。这种方式在自己拥有可靠服务器的前提下,可以自己搭建属于自己的rocketmq集群,但是如果服务器性能不太好的话,集群很容易宕机,造成消息丢失的情况;  直接购买阿里云的rocketmq产品,然后利用阿里云提供的demo,...

alan_liuyue的博客 8591

用python提取PDF中各类文本内容的方法

用python提取PDF中各类文本内容的方法

安静的软件工程师 6086

BGE-M3 文本情感分类实战:预训练模型微调,导出ONNX并测试

本文介绍了如何基于BGE-M3开源模型实现一个简单的二分类情感分析任务,展示了NLP中经典的“预训练 + 微调”范式。首先,加载预训练模型和分词器,并构建分类头整合到模型中。接着,进行数据预处理并构建DataLoader。然后,定义优化器、损失函数和训练循环,进行模型微调。微调过程中,可以选择基于[CLS] token的单特征提取或基于池化策略的多特征融合。最后,通过验证与推理评估模型性能,并导出ONNX模型以适应生产环境。BGE-M3在语义表征任务中表现优异,适合作为文本分类、语义搜索等下游任务的基础模型

大鹏的专栏 1403

RocketMQ中的顺序消息

我们在项目开发过程中,有需要使用RocketMQ顺序消息的场景,该如何使用呢?顺序消息的原理是怎样的呢?本文进行了一些探讨。 一、顺序消息的定义 顺序消息(FIFO:First Input First Output)是一种严格按照顺序进行发布和消费的消息类型。要求消息的发布和消息消费都按照顺序进行。 二、顺序消息的设计 在探讨RocketMQ中的普通消息的实现之前,我们有必要了解一下顺序消息的设计...

吴阳春的博客 5622

基于C++和Qt开发IEC104规约主站调试软件(第二章)

本章节主要讲解iec104主站软件界面设计和从站的连接功能以及部分功能代码的展示。

半青年的博客 858

rocketmq 重复拉取消息_程序重启RocketMQ消息重复消费

最近在调试RocketMQ消息发送与消费的Demo时,发现一个问题:只要重启程序,RocketMQ消息就会重复消费。那么这是什么原因导致的,又该如何解决呢?经过一番排查,发现程序使用的RocketMQ客户端版本是3.6.2,而测试环境安装的RocketMQ环境的版本是4.1.0。原来是客户端和服务器端版本不一样导致的,消息并没有最终被消费,即没有ACK消息确认,只要程序重启就会重复消费。解决方案:...

weixin_39814454的博客 2365

PCL 改进的RANSAC算法实现点云粗配准【2024最新版】

一种改进的RANSAC点云粗配准算法,具体改进见论文:“Pose Estimation using Local Structure-Specific Shape and Appearance Context”

点云侠的博客 37万+

YOLOv8 改进:使用 MobileNetV3 轻量化架构改进特征提取网络

通过使用 MobileNetV3 作为 YOLOv8 的特征提取器,能够显著降低模型复杂度和运行时资源消耗,同时在一定程度上保持检测精度。这种方法特别适合需要高效计算的边缘设备和嵌入式系统。

走向CTO的路上... 1275

springboot整合rocketmq消费者拉取消息模式

springboot整合rocketmq消费者拉取消息模式 一、rocketmq消息队列的推拉模式介绍: 推送模式(push):消息的生产者将消息发送到broker,然后broker将消息主动推送给订阅了该消息的消费者端。 拉取模式(pull):消息生产者将消息发送到broker上,然后由消费者自发的去broker去拉取消息。 为什么要使用消费端拉取消息消费的模式: 我们都知道,消息中间件可以发布或者推送消息给消费者端,如果请求的并发不是很高,且消费者模块的处理能力还不错的情况下,这种推送处理的模式是没

狗狗大蛇 5705

Fiori Elements Analytical List Page 标题区配置全攻略:从变体、过滤模式到 UI.KPI 的工程化落地

ALP标题区是Fiori Elements Analytical List Page的核心交互区域,承担变体管理、过滤模式切换、KPI展示等关键功能。本文系统解析了标题区的组成结构、可用能力及工程实现要点,包括:1)标题区包含过滤类型切换、全局KPI、变体管理等交互元素;2)详细说明视觉过滤与紧凑过滤的同步规则及实现方式;3)介绍OData V2下通过UI.KPI注解配置标题区KPI的方法;4)提供manifest.json配置示例和CDS注解写法。文章还对比了V2与V4版本的差异,为ALP开发提供实用指导

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 244

SpringCloud集成RocketMQ实现事务消息方案

前边的话 当前SpringCloud作为微服务开发的首选开源方案提供了完善的微服务开发技术套件,不过针对分布式领域的难题–分布式事务控制并没有成熟的方案,本篇将介绍作为柔性事务控制的优秀方案RocketMQ的使用原理和方法。 通过本案例的学习,掌握SpringCloud集成RocketMQ事务分布式事务控制的方法。 分布式事务控制系列文章 分布式事务视频教程下载 RocketMQ事务消息方案 RocketMQ 是一个来自阿里巴巴的分布式消息中间件,于 2012 年开源,并在 2017 年正式成为 Apach

3万+

Halcon 形态学 开发案例 (开运算opening(先腐蚀再膨胀)、闭运算closing(先膨胀再腐蚀))

算子方法:功能:使用用户自定义的结构元素对区域进行开运算参数: Region(输入参数) :输入区域 StructElement(输入参数) :结构元素(区域) RegionOpening(输出参数) :开运算后的区域功能:使用圆形结构元素对区域进行开运算参数: Region(输入参数) :输入区域 RegionOpening(输出参数) :开运算后的区域 Radius(输入参数) :圆形结构元素的半径功能:使用矩形结构元素对区域进行开运算。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1618

2023年全国职业院校技能大赛“信息安全管理与评估”-真题——赛题题目+答案解析

2023年全国职业院校技能大赛“信息安全管理与评估”-真题——赛题题目+答案解析

君逍遥o 6004

RocketMQ-从源码和Java项目Demo理解运行架构

从两个角度来入门理解RocketMQ运行架构:从源码的示例quickstart和自己搭建Java项目Demo

1215

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SpringBoot整合RocketMQ

0. 启动Name Server与 Broker 1. 引入依赖 添加 RocketMQ 客户端访问支持,具体版本和安装的 RocketMQ 版本一致即可。 <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.7.1</version> </

Hello World 2949

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

springboot集成rocketmq基础

回顾一下springboot集成rocketmq的一些用法,实例进行测试。

2502_90526087的博客 971

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

RocketMQ 5.0 gRPC 协议 Go SDK 使用

RocketMQ5.0 gRPC 协议go客户端使用,gRPC SDK 仅支持版本大于等于5.0的服务端gRPC SDK和原来的 Remoting SDK的关系,看下面官网截图目前gRPC 协议客户端还没有完善,go 只有 SimpleConsumer。

悟世君子的博客 2862

RocketMQ系列文章(入门篇第4篇):Java客户端快速上手——普通消息收发实战

发送模式可靠性性能适用场景同步发送高中等核心业务、要求消息必达异步发送高高高并发业务、非阻塞场景单向发送低极高日志采集、埋点上报等非核心场景核心总结普通消息是RocketMQ最基础场景,Java客户端核心API分为生产者(DefaultMQProducer)和消费者(DefaultMQPushConsumer)同步、异步、单向发送模式各有优劣,根据业务可靠性和性能要求选型消费者推模式开箱即用,需处理消费成功/失败回执,保证消费可靠性。

qq_29757467的博客 395
上一篇: rocketmq console搭建和简单使用
下一篇: JWT实践原理以及自己生成token案例
Persistence___
博客等级 码龄8年 47粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值