异步消息AcitveMq

异步消息

  MQ 全称为 MessageQueue ,中文名 为消 息队列, 是一个消息的接收和转发的容器可用于消息推送 ActiveMQ是Apache提供的一个开源消息系统 完全采用 Java 来实现,因此能够很好地支持 J2EE提出的几JMS(Java Message Service)规范

账号admin 密码admin 需要去打开服务先
双击activemq.bat进入,启动时默认8161端口

image

加入依赖包

<!-- spring-boot-starter-activemq -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

添加ActiveMQ配置

### activemq配置
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.in-memory=true
spring.activemq.pool.enabled=false
spring.activemq.packages.trust-all=true #信任所有包

drop table if exists 'ay_mood';
create table 'ay_mood'(
'id' varchar(32) NOT NULL,
'content' varchar(256) default null,
'user_id' varchar(32) default null,
'praise_time' datetime default null,
primary key ('id'),
key 'mood_user_id_index' ('user_id') using btree) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

并做对应的添加数据操作,服务处操作

编写消费者和生成者类

然后在mq包下创建MoodProducer类--消费者

@Resource
    private JmsMessagingTemplate jmsMessagingTemplate;  //发消息工具类

    /**
     * 发送消息
     * @param destination 把消息放到队列
     * @param messages 待发送的消息
     */
    public void sendMessages(Destination destination, final String messages){
        jmsMessagingTemplate.convertAndSend(destination,messages);
    }

再创建AyMoodConsumer类--消费者

@JmsListener(destination = "ay.queue") //配置消费者的监听配置
    public void receiveQueue(String text) { //text为发送的消息
        System.out.println("用户发表说说【" + text + "】成功");
}

也可以使用到service层,message可以改为POJO类
MoodProducer类中

public void sendMessages(Destination destination, final AyMood messages){
        jmsMessagingTemplate.convertAndSend(destination,messages);
    }

AyMoodConsumer类中

@Resource
    private AyMoodService ayMoodService;
/**
     * 接收方法
     * @param ayMood 消息类
     */
    @JmsListener(destination = "ay.queue.asyn.save")
    public void receiveQueue(AyMood ayMood){
        ayMoodService.save(ayMood);
    }

AyMoodProducer 类中

//消息队列
    private static Destination destination = new ActiveMQQueue("ay.queue.asyn.save");
    @Resource
    private AyMoodProducer ayMoodProducer;
    @Override
    public String ActiveMQSave(AyMood ayMood) {
        ayMoodProducer.sendMessages(destination,ayMood);
        return "success";
    }

test方法

@Resource
    private AyMoodProducer ayMoodProducer;//生成者
 @Test
    void testActiveMQ3(){
        var ayMood = new AyMood();
        ayMood.setUserId("2");
        ayMood.setId("2");
        ayMood.setPublishTime(new Date());
        ayMood.setContent("这是使用ActiveMQ来发送的消息!");
        ayMood.setPraiseNum(12);
        var msg = ayMoodService.save(ayMood);
        logger.info("这是异步消息:"+msg);
    }

日志打印:

testActiveMQ3(MySpringBootApplicationTests.java:171) - 这是异步消息:AyMood(id=2, content=这是使用ActiveMQ来发送的消息!, userId=2, praiseNum=12, publishTime=Mon Oct 28 15:23:58 CST 2019)

Spring Boot 异步调用

异步调用介绍

异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,
每一步必须等到上一步执行完成之后才能执行,而异步调用则无须等待上一步程序执
行完成即可执行 。在日常开发的项目中,当访问的接口 较慢或者做耗时任务时,不想
程序一直卡在耗时任务上,想让程序能够并行执行,我们除了可以使用多线程来并行
地处理任务 ,也可以使用 Spring Boot 提供的异步处理方式 @Async 来处理。在 Spring
Boot框架中,只要提过 @Async 注解就能将普通的同步任务改为异步调用任务

开始使用

在主接口XXXApplication主接口类中上加注解

@EnableAsync//启动异步调用

在需要的方法内添加@Async
使用Future<T>做放回值(java.util.concurrent.Future)T为实际返回的值如List<AyUser>
如:

/**
     * 异步查询
     * @return 异步存储
     */
    @Override
    public Future<List<AyUser>> findAllByAsy() {
        System.out.println("开始异步任务!");
        var start = System.currentTimeMillis();
        var all = ayUserRepository.findAll();
        var end = System.currentTimeMillis();
        System.out.println("结束异步任务!耗时:"+(end-start)+"ms");
        return new AsyncResult<List<AyUser>>(all);
    }

异步查询可以比同步快非常多!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,094评论 1 32
  • MQ简介: MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通...
    AlbenXie阅读 2,154评论 0 2
  • 1、 七宝在微博登了一条招亲的消息,说谁能用一句话撩到她,就和谁相亲。七宝是谁?大众女神,长腿照一发,立刻涌来一波...
    巫其格阅读 9,772评论 95 244
  • 开始课件学习啦,让我对以前这些概念有了全新的认识,极度开放、积极主动、目标管理。 其实平时看书的时...
    小白_d171阅读 197评论 0 0
  • 从东晋开始,许多的少数民族强大起来,都开始往中原内迁,把东晋逼的只能往南方迁移。以秦岭淮河为界,这些少数民族与东晋...
    懒猫鳶阅读 366评论 0 0