异步消息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);
    }

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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