Generation of unique message IDs in JMS

Source: Internet
Author: User

In the development of message-oriented middleware, it is often necessary to generate a unique message identifier. You can add a corresponding prefix to the server deployed in the project, and then the timestamp is too long based on the system timestamp, it can be converted into a 36-digit string to form the unique identifier of the message:


import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class MsgIDUtil {private static final int BASE_YEAR = 2013;private static final long MILLISECOND_PER_DAY = 86400000L;private static long lastTicketTime = 0l;public static synchronized String generateTicketNumber(String prefix) {if (prefix != null && prefix.trim().length() > 0) {return prefix + generateTicketNumber();}return generateTicketNumber();}public static synchronized String generateTicketNumber() {long givenTime = System.currentTimeMillis();if (givenTime <= lastTicketTime) {givenTime = lastTicketTime + 1;}String result = generateTicketNumber(givenTime);lastTicketTime = givenTime;return result;}protected static synchronized String generateTicketNumber(long givenTime) {Calendar cal = Calendar.getInstance();cal.setTimeInMillis(givenTime);int year = cal.get(Calendar.YEAR);int yearIndex = year - BASE_YEAR;if (yearIndex < 0 || yearIndex > 36) {throw new IllegalArgumentException("Input Time is earlier then "           + BASE_YEAR + " or greater than " + BASE_YEAR + 36);}int dayOfYear = cal.get(Calendar.DAY_OF_YEAR);// get base line of the time of the dayCalendar cal2 = Calendar.getInstance();cal2.clear();cal2.set(Calendar.YEAR, year);cal2.set(Calendar.DAY_OF_YEAR, dayOfYear);long baselineTime = cal2.getTimeInMillis();StringBuilder sb = new StringBuilder();sb.append(Integer.toString(yearIndex, 36));String dayOfYearStr = Integer.toString(dayOfYear, 36);for (int i = 0; i < (2 - dayOfYearStr.length()); i++) {sb.append(0);}sb.append(dayOfYearStr);String timeOfDayStr = Long.toString(givenTime - baselineTime, 36);for (int i = 0; i < (6 - timeOfDayStr.length()); i++) {sb.append(0);}sb.append(timeOfDayStr);return sb.toString().toUpperCase();}public static long getTicketTime(String ticketNumber) {if (ticketNumber == null || ticketNumber.trim().length() < 9 || ticketNumber.trim().length() > 10) {throw new IllegalArgumentException("Input ID is not valid -->" + ticketNumber);}if (ticketNumber.trim().length() == 10) {ticketNumber = ticketNumber.trim().substring(1);}int yearIndex = Integer.parseInt(ticketNumber.substring(0, 1), 36);int dayIndex = Integer.parseInt(ticketNumber.substring(1, 3), 36);long millIndex = Long.parseLong(ticketNumber.substring(3), 36);if (dayIndex > 365 || millIndex > MILLISECOND_PER_DAY) {throw new IllegalArgumentException("Can't parse the input Ticket number " + ticketNumber);}Calendar result = Calendar.getInstance();result.clear();result.set(Calendar.YEAR, BASE_YEAR + yearIndex);result.set(Calendar.DAY_OF_YEAR, dayIndex);return result.getTimeInMillis() + millIndex;}private static long getTimeFromStr(String dateValue, String dateFormat) throws ParseException {SimpleDateFormat sdFormat = new SimpleDateFormat(dateFormat);Date output = sdFormat.parse(dateValue);return output.getTime();}protected static synchronized String generateTicketNumber(String dateValue, String dateFormat) throws ParseException {long givenTime = getTimeFromStr(dateValue, dateFormat);return generateTicketNumber(givenTime);}public static void main(String[] args) {String newTicketNumber = generateTicketNumber("A");System.out.println(newTicketNumber);}}


Generation of unique message IDs in JMS

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.