springboot 学习笔记(七)

  

(七)springboot整合activemq,消息消费,以及发送对象消息

  1、springboot整合activemq发送消息,上一节已经介绍了,现在要对消息队列中的内容进行处理,下面写一个consumer类,要加上@component注解,springboot会自动加载,@jmslistener标注为消息监听器,监听的队列通过destination属性指定

@Component
public class TestConsumer {

    @JmsListener(destination="test.queue")
    public void getMsg(String msg) {
        System.out.println("收到消息:"+msg);
    }
}

  2、之前已经向activemq发送了两条消息,这时重启项目,看一下控制台会有以下输出

  3、因为业务需求,我们可能需要向消息队列中发送对象,在activemq中新建user.queue队列,直接上代码

  (1)首先在service接口中新增一个方法public void sendMessage(Destination destination,Object object);

  具体实现为

  public void sendMessage(Destination destination, Object object) {
        
        jms.convertAndSend(destination, object);
    }

   (2)写一个user实体类,具体属性及get、set方法,要在消息队列中发送对象,要实现序列化

/**
 * 
 */
package com.zc.app.test.domain;

import java.io.Serializable;
import java.util.Date;


public class User implements Serializable{
    
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;
    private String pwd;
    private String phone;
    private Date createTime;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }


}
User

   (3)写一个UserConsumer,使用ObjectMapper进行对象转换

/**
 * 
 */
package com.zc.app.test.jms;

import java.io.IOException;

import javax.jms.JMSException;
import javax.jms.ObjectMessage;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zc.app.test.domain.User;

@Component
public class UserConsumer {
    @Autowired
    private ObjectMapper om;
    
    //实时监听队列
    @JmsListener(destination="user.queue")
    public void receiveQueue(ObjectMessage object) throws JsonParseException, JsonMappingException, IOException, JMSException {
        System.out.println(object.getObject().toString());
        User user = om.convertValue(object.getObject(), User.class);
        System.out.println("收到对象为:"+user.getName());
    }

}
UserConsumer

   (4)进行对象传输,需要开启activemq开启包配置,要在application.properties添加spring.activemq.packages.trust-all=true

    (5)在controller中写一下测试,上代码

    @GetMapping("sendObj")
    public String Object() {
        User user = new User();
        user.setAge(18);
        user.setCreateTime(new Date());
        user.setName("张三");
        user.setPhone("1154421122");
        user.setPwd("123456");
        Destination destination = new ActiveMQQueue("user.queue");
        msgService.sendMessage(destination, user);
        return "send obj success";

    }

    4、启动程序,直接访问http://localhost:8080/msg/sendObj,输出如下内容

 5、这样就可以设置vo等对象进行负责的业务处理,我们也可以用json格式来进行对象的传输,使用ObjectMapper来进行json与对象的转换,相对来说这样的方式更加安全。

 

 

猜你喜欢

转载自www.cnblogs.com/codingstudy/p/10287397.html