ÀÖÓãµç¾º

½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

ÔõÑùΪ³ÌÐòÌí¼ÓÑÓ³ÙÈÎÎñ£¿ÑÓ³ÙÈÎÎñʵÏÖ˼·

¸üÐÂʱ¼ä:2023Äê06ÔÂ21ÈÕ18ʱ41·Ö À´Ô´:ÀÖÓãµç¾º ä¯ÀÀ´ÎÊý:

ºÃ¿Ú±®ITÅàѵ

ÑÓ³ÙÈÎÎñÓй̶¨ÖÜÆÚÓÐÃ÷È·³ö·¢Ê±¼ä£¬¶øÑÓ³Ù¶ÓÁÐûÓй̶¨µÄ¿ªÊ¼Ê±¼äËü³£³£ÊÇÓÉÒ»¸öʼþ´¥·¢µÄ£¬¶øÔÚÕâ¸öʼþ´¥·¢Ö®ºóµÄÒ»¶Îʱ¼äÄÚ´¥·¢ÁíÒ»¸öʼþ£¬ÈÎÎñ¿ÉÒÔÁ¢¼´Ö´ÐУ¬Ò²¿ÉÒÔÑÓ³Ù¡£

ÑÓ³ÙÈÎÎñ

ÑÓ³ÙÈÎÎñµÄÓ¦Óó¡¾°£º

³¡¾°Ò»£º¶©µ¥Ïµ¥Ö®ºó30·ÖÖÓºó£¬Èç¹ûÓû§Ã»Óи¶Ç®£¬Ôòϵͳ×Ô¶¯È¡Ïû¶©µ¥;Èç¹ûÆÚ¼äϵ¥³É¹¦£¬ÈÎÎñÈ¡Ïû

³¡¾°¶þ£º½Ó¿Ú¶Ô½Ó³öÏÖÍøÂçÎÊÌ⣬1·ÖÖÓºóÖØÊÔ£¬Èç¹ûʧ°Ü£¬2·ÖÖÓÖØÊÔ£¬Ö±µ½³öÏÖãÐÖµÖÕÖ¹

ʵÏÖÑÓ³ÙÈÎÎñµÄÁ½ÖÖÈÎÎñ

1)DelayQueue

JDK×Ô´øDelayQueue ÊÇÒ»¸öÖ§³ÖÑÓʱ»ñÈ¡ÔªËØµÄ×èÈû¶ÓÁУ¬ ÄÚ²¿²ÉÓÃÓÅÏȶÓÁÐ PriorityQueue ´æ´¢ÔªËØ£¬Í¬Ê±ÔªËرØÐëʵÏÖ Delayed ½Ó¿Ú;ÔÚ´´½¨ÔªËØÊ±¿ÉÒÔÖ¸¶¨¶à¾Ã²Å¿ÉÒÔ´Ó¶ÓÁÐÖлñÈ¡µ±Ç°ÔªËØ£¬Ö»ÓÐÔÚÑÓ³ÙÆÚÂúʱ²ÅÄÜ´Ó¶ÓÁÐÖÐÌáÈ¡ÔªËØ

DelayQueue

DelayQueueÊôÓÚÅÅÐò¶ÓÁУ¬ËüµÄÌØÊâÖ®´¦ÔÚÓÚ¶ÓÁеÄÔªËØ±ØÐëʵÏÖDelayed½Ó¿Ú£¬¸Ã½Ó¿ÚÐèҪʵÏÖcompareToºÍgetDelay·½·¨

getDelay·½·¨£º»ñÈ¡ÔªËØÔÚ¶ÓÁÐÖеÄÊ£Óàʱ¼ä£¬Ö»Óе±Ê£Óàʱ¼äΪ0Ê±ÔªËØ²Å¿ÉÒÔ³ö¶ÓÁС£

compareTo·½·¨£ºÓÃÓÚÅÅÐò£¬È·¶¨ÔªËسö¶ÓÁеÄ˳Ðò¡£

ʵÏÖ£º

1£ºÔÚ²âÊÔ°üjdkÏ´´½¨ÑÓ³ÙÈÎÎñÔªËØ¶ÔÏóDelayedTask£¬ÊµÏÖcompareToºÍgetDelay·½·¨£¬

2£ºÔÚmain·½·¨Öд´½¨DelayQueue²¢ÏòÑÓ³Ù¶ÓÁÐÖÐÌí¼ÓÈý¸öÑÓ³ÙÈÎÎñ£¬

3£ºÑ­»·µÄ´ÓÑÓ³Ù¶ÓÁÐÖÐÀ­È¡ÈÎÎñ

public class DelayedTask  implements Delayed{
    
    // ÈÎÎñµÄÖ´ÐÐʱ¼ä
    private int executeTime = 0;
    
    public DelayedTask(int delay){
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.SECOND,delay);
        this.executeTime = (int)(calendar.getTimeInMillis() /1000 );
    }

    /**
     * ÔªËØÔÚ¶ÓÁÐÖеÄÊ£Óàʱ¼ä
     * @param unit
     * @return
     */
    @Override
    public long getDelay(TimeUnit unit) {
        Calendar calendar = Calendar.getInstance();
        return executeTime - (calendar.getTimeInMillis()/1000);
    }

    /**
     * ÔªËØÅÅÐò
     * @param o
     * @return
     */
    @Override
    public int compareTo(Delayed o) {
        long val = this.getDelay(TimeUnit.NANOSECONDS) - o.getDelay(TimeUnit.NANOSECONDS);
        return val == 0 ? 0 : ( val < 0 ? -1: 1 );
    }


    public static void main(String[] args) {
        DelayQueue<DelayedTask> queue = new DelayQueue<DelayedTask>();
        
        queue.add(new DelayedTask(5));
        queue.add(new DelayedTask(10));
        queue.add(new DelayedTask(15));

        System.out.println(System.currentTimeMillis()/1000+" start consume ");
        while(queue.size() != 0){
            DelayedTask delayedTask = queue.poll();
            if(delayedTask !=null ){
                System.out.println(System.currentTimeMillis()/1000+" cosume task");
            }
            //ÿ¸ôÒ»ÃëÏû·ÑÒ»´Î
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }     
    }
}

DelayQueueʵÏÖÍê³ÉÖ®ºó˼¿¼Ò»¸öÎÊÌ⣺

ʹÓÃÏ̳߳ػòÕßÔ­ÉúDelayQueue³ÌÐò¹ÒµôÖ®ºó£¬ÈÎÎñ¶¼ÊÇ·ÅÔÚÄڴ棬ÐèÒª¿¼ÂÇδ´¦ÀíÏûÏ¢µÄ¶ªÊ§´øÀ´µÄÓ°Ï죬ÈçºÎ±£Ö¤Êý¾Ý²»¶ªÊ§£¬ÐèÒª³Ö¾Ã»¯(´ÅÅÌ)

2)RabbitMQʵÏÖÑÓ³ÙÈÎÎñ

TTL£ºTime To Live (ÏûÏ¢´æ»îʱ¼ä)

ËÀÐŶÓÁУºDead Letter Exchange(ËÀÐŽ»»»»ú)£¬µ±ÏûÏ¢³ÉΪDead messageºó£¬¿ÉÒÔÖØÐ·¢ËÍÁíÒ»¸ö½»»»»ú(ËÀÐŽ»»»»ú)¡£

RabbitMQʵÏÖÑÓ³ÙÈÎÎñ

3)redisʵÏÖ

zsetÊý¾ÝÀàÐ͵ÄÈ¥ÖØÓÐÐò(·ÖÊýÅÅÐò)ÌØµã½øÐÐÑÓ³Ù¡£ÀýÈ磺ʱ¼ä´Á×÷Ϊscore½øÐÐÅÅÐò¡£

redisʵÏÖ

redisʵÏÖÑÓ³ÙÈÎÎñµÄ˼·

redisÑÓ³ÙÈÎÎñµÄ˼·

1.ΪʲôÈÎÎñÐèÒª´æ´¢ÔÚÊý¾Ý¿âÖÐ?

ÑÓ³ÙÈÎÎñÊÇÒ»¸öͨÓõķþÎñ£¬ÈκÎÐèÒªÑÓ³ÙµÃÈÎÎñ¶¼¿ÉÒÔµ÷Óø÷þÎñ£¬ÐèÒª¿¼ÂÇÊý¾Ý³Ö¾Ã»¯µÄÎÊÌ⣬´æ´¢Êý¾Ý¿âÖÐÊÇÒ»ÖÖÊý¾Ý°²È«µÄ¿¼ÂÇ¡£

2.ΪʲôredisÖÐʹÓÃÁ½ÖÖÊý¾ÝÀàÐÍ£¬listºÍzset?

ЧÂÊÎÊÌ⣬Ëã·¨µÄʱ¼ä¸´ÔÓ¶È

3.ÔÚÌí¼ÓzsetÊý¾ÝµÄʱºò£¬ÎªÊ²Ã´²»ÐèÒªÔ¤¼ÓÔØ?

ÈÎÎñÄ£¿éÊÇÒ»¸öͨÓõÄÄ£¿é£¬ÏîÄ¿ÖÐÈκÎÐèÒªÑÓ³Ù¶ÓÁеĵط½£¬¶¼¿ÉÒÔµ÷ÓÃÕâ¸ö½Ó¿Ú£¬Òª¿¼Âǵ½Êý¾ÝÁ¿µÄÎÊÌ⣬Èç¹ûÊý¾ÝÁ¿Ìرð´ó£¬ÎªÁË·ÀÖ¹×èÈû£¬Ö»ÐèÒª°ÑδÀ´¼¸·ÖÖÓÒªÖ´ÐеÄÊý¾Ý´æÈ뻺´æ¼´¿É¡£

4)ÑÓ³ÙÈÎÎñ·þÎñʵÏÖ

´î½¨heima-leadnews-scheduleÄ£¿é

leadnews-scheduleÊÇÒ»¸öͨÓõķþÎñ£¬µ¥¶À´´½¨Ä£¿éÀ´¹ÜÀíÈκÎÀàÐ͵ÄÑÓ³ÙÈÎÎñ

¢Ù£ºµ¼Èë×ÊÁÏÎļþ¼ÐϵÄheima-leadnews-scheduleÄ£¿éµ½heima-leadnews-serviceÏ£¬ÈçÏÂͼËùʾ£º

ÑÓ³ÙÈÎÎñʵÏÖ

¢Ú£ºÌí¼Óbootstrap.yml

server:
  port: 51701
spring:
  application:
    name: leadnews-schedule
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.200.130:8848
      config:
        server-addr: 192.168.200.130:8848
        file-extension: yml

¢Û£ºÔÚnacosÖÐÌí¼Ó¶ÔÓ¦ÅäÖ㬲¢Ìí¼ÓÊý¾Ý¿â¼°mybatis-plusµÄÅäÖÃ

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/leadnews_schedule?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: root
# ÉèÖÃMapper½Ó¿ÚËù¶ÔÓ¦µÄXMLÎļþλÖã¬Èç¹ûÄãÔÚMapper½Ó¿ÚÖÐÓÐ×Ô¶¨Òå·½·¨£¬ÐèÒª½øÐиÃÅäÖÃ
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  # ÉèÖñðÃû°üɨÃè·¾¶£¬Í¨¹ý¸ÃÊôÐÔ¿ÉÒÔ¸ø°üÖеÄÀà×¢²á±ðÃû
  type-aliases-package: com.heima.model.schedule.pojos
0 ·ÖÏíµ½£º
ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿