@Test public void testBatchSend_CheckProperties() throws Exception { List<Message> messageList = new ArrayList<>(); Message message = new Message(); message.setTopic(topic); message.setKeys("keys123"); message.setTags("tags123"); message.setWaitStoreMsgOK(false); message.setBuyerId("buyerid123"); message.setFlag(123); message.setBody("body".getBytes()); messageList.add(message); Assert.assertEquals(message.getTopic(), messageByMsgId.getTopic()); Assert.assertEquals(message.getTopic(), messageByOffset.getTopic()); Assert.assertEquals(message.getKeys(), messageByOffset.getKeys()); Assert.assertEquals(message.getKeys(), messageByMsgId.getKeys()); Assert.assertEquals(message.getTags(), messageByOffset.getTags()); Assert.assertEquals(message.getTags(), messageByMsgId.getTags()); Assert.assertEquals(message.isWaitStoreMsgOK(), messageByOffset.isWaitStoreMsgOK()); Assert.assertEquals(message.isWaitStoreMsgOK(), messageByMsgId.isWaitStoreMsgOK()); Assert.assertEquals(message.getBuyerId(), messageByOffset.getBuyerId()); Assert.assertEquals(message.getBuyerId(), messageByMsgId.getBuyerId()); Assert.assertEquals(message.getFlag(), messageByOffset.getFlag()); Assert.assertEquals(message.getFlag(), messageByMsgId.getFlag());
public static Message cloneMessage(final Message msg) { Message newMsg = new Message(msg.getTopic(), msg.getBody()); newMsg.setFlag(msg.getFlag()); newMsg.setProperties(msg.getProperties()); return newMsg; }
public static org.apache.rocketmq.common.message.Message msgConvert(BytesMessage omsMessage) { org.apache.rocketmq.common.message.Message rmqMessage = new org.apache.rocketmq.common.message.Message(); rmqMessage.setBody(omsMessage.getBody(byte[].class)); KeyValue sysHeaders = omsMessage.sysHeaders(); KeyValue userHeaders = omsMessage.userHeaders(); //All destinations in RocketMQ use Topic rmqMessage.setTopic(sysHeaders.getString(BuiltinKeys.DESTINATION)); if (sysHeaders.containsKey(BuiltinKeys.START_TIME)) { long deliverTime = sysHeaders.getLong(BuiltinKeys.START_TIME, 0); if (deliverTime > 0) { rmqMessage.putUserProperty(RocketMQConstants.START_DELIVER_TIME, String.valueOf(deliverTime)); } } for (String key : userHeaders.keySet()) { MessageAccessor.putProperty(rmqMessage, key, userHeaders.getString(key)); } //System headers has a high priority for (String key : sysHeaders.keySet()) { MessageAccessor.putProperty(rmqMessage, key, sysHeaders.getString(key)); } return rmqMessage; }
public Message(String topic, String tags, String keys, int flag, byte[] body, boolean waitStoreMsgOK) { this.topic = topic; this.flag = flag; this.body = body; if (tags != null && tags.length() > 0) this.setTags(tags); if (keys != null && keys.length() > 0) this.setKeys(keys); this.setWaitStoreMsgOK(waitStoreMsgOK); }
private static Message buildMessage(final String topic, final int messageSize) throws UnsupportedEncodingException { Message msg = new Message(); msg.setTopic(topic); StringBuilder sb = new StringBuilder(); for (int i = 0; i < messageSize; i += 11) { sb.append("hello jodie"); } msg.setBody(sb.toString().getBytes(MixAll.DEFAULT_CHARSET)); return msg; }
public static void main(String[] args) throws Exception { DefaultMQProducer producer = new DefaultMQProducer("BatchProducerGroupName"); producer.start(); //If you just send messages of no more than 1MiB at a time, it is easy to use batch //Messages of the same batch should have: same topic, same waitStoreMsgOK and no schedule support String topic = "BatchTest"; List<Message> messages = new ArrayList<>(); messages.add(new Message(topic, "Tag", "OrderID001", "Hello world 0".getBytes())); messages.add(new Message(topic, "Tag", "OrderID002", "Hello world 1".getBytes())); messages.add(new Message(topic, "Tag", "OrderID003", "Hello world 2".getBytes())); producer.send(messages); } }
/** * Info,error,warn,callback method implementation */ @Override protected void append(ILoggingEvent event) { if (!isStarted()) { return; } String logStr = this.layout.doLayout(event); try { Message msg = new Message(topic, tag, logStr.getBytes()); msg.getProperties().put(ProducerInstance.APPENDER_TYPE, ProducerInstance.LOGBACK_APPENDER); //Send message and do not wait for the ack from the message broker. producer.sendOneway(msg); } catch (Exception e) { addError("Could not send message in RocketmqLogbackAppender [" + name + "]. Message is : " + logStr, e); } }
try { if (message.getPayload() instanceof byte[]) { toSend = new Message(destination, (byte[]) message.getPayload()); toSend = new Message(destination, ((String) message.getPayload()).getBytes()); message); headerAccessor.setLeaveMutable(true); toSend.setDelayTimeLevel(headerAccessor.getDelayTimeLevel()); toSend.setTags(headerAccessor.getTags()); toSend.setKeys(headerAccessor.getKeys()); toSend.setFlag(headerAccessor.getFlag()); for (Map.Entry<String, String> entry : headerAccessor.getUserProperties() .entrySet()) { toSend.putUserProperty(entry.getKey(), entry.getValue());
public static Message convert2RMQMessage(JmsBaseMessage jmsMsg) throws Exception { Message rocketmqMsg = new MessageExt(); rocketmqMsg.setBody(MessageConverter.getContentFromJms(jmsMsg)); rocketmqMsg.setTopic(topic); String messageType = destination.getMessageType(); Preconditions.checkState(!messageType.contains("||"), "'||' can not be in the destination when sending a message"); rocketmqMsg.setTags(messageType); String value = properties.getProperty(name); if (MessageConst.PROPERTY_KEYS.equals(name)) { rocketmqMsg.setKeys(value); } else if (MessageConst.PROPERTY_TAGS.equals(name)) { rocketmqMsg.setTags(value); } else if (MessageConst.PROPERTY_DELAY_TIME_LEVEL.equals(name)) { rocketmqMsg.setDelayTimeLevel(Integer.parseInt(value)); } else if (MessageConst.PROPERTY_WAIT_STORE_MSG_OK.equals(name)) { rocketmqMsg.setWaitStoreMsgOK(Boolean.parseBoolean(value)); } else if (MessageConst.PROPERTY_BUYER_ID.equals(name)) { rocketmqMsg.setBuyerId(value); } else { rocketmqMsg.putUserProperty(name, value);
public static Message decodeMessage(ByteBuffer byteBuffer) throws Exception { Message message = new Message(); // 1 TOTALSIZE byteBuffer.getInt(); // 2 MAGICCODE byteBuffer.getInt(); // 3 BODYCRC byteBuffer.getInt(); // 4 FLAG int flag = byteBuffer.getInt(); message.setFlag(flag); // 5 BODY int bodyLen = byteBuffer.getInt(); byte[] body = new byte[bodyLen]; byteBuffer.get(body); message.setBody(body); // 6 properties short propertiesLen = byteBuffer.getShort(); byte[] propertiesBytes = new byte[propertiesLen]; byteBuffer.get(propertiesBytes); message.setProperties(string2messageProperties(new String(propertiesBytes, CHARSET_UTF8))); return message; }
byte[] prevBody = msg.getBody(); try { final String tranMsg = msg.getProperty(MessageConst.PROPERTY_TRANSACTION_PREPARED); if (tranMsg != null && Boolean.parseBoolean(tranMsg)) { sysFlag |= MessageSysFlag.TRANSACTION_PREPARED_TYPE; context.setMessage(msg); context.setMq(mq); String isTrans = msg.getProperty(MessageConst.PROPERTY_TRANSACTION_PREPARED); if (isTrans != null && isTrans.equals("true")) { context.setMsgType(MessageType.Trans_Msg_Half); if (msg.getProperty("__STARTDELIVERTIME") != null || msg.getProperty(MessageConst.PROPERTY_DELAY_TIME_LEVEL) != null) { context.setMsgType(MessageType.Delay_Msg); requestHeader.setTopic(msg.getTopic()); requestHeader.setDefaultTopic(this.defaultMQProducer.getCreateTopicKey()); requestHeader.setDefaultTopicQueueNums(this.defaultMQProducer.getDefaultTopicQueueNums()); requestHeader.setSysFlag(sysFlag); requestHeader.setBornTimestamp(System.currentTimeMillis()); requestHeader.setFlag(msg.getFlag()); requestHeader.setProperties(MessageDecoder.messageProperties2String(msg.getProperties())); requestHeader.setReconsumeTimes(0); requestHeader.setUnitMode(this.isUnitMode()); msg.setBody(prevBody);
public void sendToMQ(Object object,String tags) throws Exception { //构造消息数据 Message message = new Message(); //主题 message.setTopic(Const.PLAN_TOPIC); message.setTags(tags); //key String uuid = UUID.randomUUID().toString(); message.setKeys(uuid); message.setBody(JSON.toJSONString(object).getBytes()); //添加参数 Map<String, Object> transactionMapArgs = new HashMap<String, Object>(); this.planProducer.sendTransactionMessage(message, this.transactionExecuterImpl, transactionMapArgs); }
org.apache.rocketmq.common.message.Message rocketMsg = new org.apache.rocketmq.common.message.Message(topic, tags, payloads); Object keys = headers.get(MessageConst.PROPERTY_KEYS); if (!StringUtils.isEmpty(keys)) { // if headers has 'KEYS', set rocketMQ message key rocketMsg.setKeys(keys.toString()); rocketMsg.setFlag(flag); rocketMsg.setWaitStoreMsgOK(waitStoreMsgOK); && !Objects.equals(entry.getKey(), "WAIT_STORE_MSG_OK")) // exclude "KEYS", "FLAG", "WAIT_STORE_MSG_OK" .forEach(entry -> { rocketMsg.putUserProperty("USERS_" + entry.getKey(), String.valueOf(entry.getValue())); // add other properties with prefix "USERS_" });
public static void main(String[] args) throws MQClientException, InterruptedException { DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName"); producer.start(); try { for (int i = 0; i < 6000000; i++) { Message msg = new Message("TopicFilter7", "TagA", "OrderID001", "Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET)); msg.putUserProperty("SequenceId", String.valueOf(i)); SendResult sendResult = producer.send(msg); System.out.printf("%s%n", sendResult); } } catch (Exception e) { e.printStackTrace(); } producer.shutdown(); } }
Message message = new Message(topic, str.getBytes(Charset.forName("utf-8"))); if (!StringUtils.isEmpty(tag)) { message.setTags(tag); message.setKeys(messageKey); message.setDelayTimeLevel(delayTimeLevel);
public Object getMessageByTag(String tag) { Object objMsg = null; if (this instanceof RMQNormalProducer) { org.apache.rocketmq.common.message.Message msg = new org.apache.rocketmq.common.message.Message( topic, (RandomUtil.getStringByUUID() + "." + new Date()).getBytes()); objMsg = msg; if (tag != null) { msg.setTags(tag); } } return objMsg; }
/** * 发送数据的接口 * * @param keySet * 本批次包含的keyset * @param data * 本批次的轨迹数据 */ public void sendTraceDataByMQ(Set<String> keySet, String data) { String topic = OnsTraceConstants.traceTopic; final Message message = new Message(topic, data.getBytes()); message.setKeys(keySet); try { traceProducer.send(message, new SendCallback() { @Override public void onSuccess(SendResult sendResult) { } @Override public void onException(Throwable e) { //todo 对于发送失败的数据,如何保存,保证所有轨迹数据都记录下来 clientlog.info("send trace data failed ,the msgidSet is"+message.getKeys()); } }, 5000); } catch (Exception e) { clientlog.info("send trace data failed ,the msgidSet is"+message.getKeys()); } }
for (; nextIndex < messages.size(); nextIndex++) { Message message = messages.get(nextIndex); int tmpSize = message.getTopic().length() + message.getBody().length; Map<String, String> properties = message.getProperties(); for (Map.Entry<String, String> entry : properties.entrySet()) { tmpSize += entry.getKey().length() + entry.getValue().length();