rabbitmq发送消息的两种格式:发送json数据和直接发送对象以
及对json与对象之间。。。
前奏:json格式字符串与Java对象的相互转换⽅法
第⼀种:com.fasterxml.jackson.databind.ObjectMapper 包
import com.fasterxml.jackson.databind.ObjectMapper;
ObjectMapper objectMapper = new ObjectMapper();
//json字符串转成Java对象
Myclass myclass = adValue(jsonStr , Myclass.class);
//Java对象转成json字符串
String jsonStr = objectMapper.writeValueAsString(myclass);
第⼆种: com.alibaba.fastjson.JSONObject 包
import com.alibaba.fastjson.JSONObject;
// json转换成java对象
Myclass myclass = JSONObject.parseObject(jsonStr , Myclass.class);
//java对象转换成json
String jsonObject = JSONString(myclass);
第三种:net.sf.json.JSONObject 包
import net.sf.json.JSONObject;
JSONObject jsonobject = JSONObject.fromObject(jsonStr);
//json字符串转成java对象
Myclass myclass = (Bean(jsonobject,Myclass.class);
//java对象转换成json
JSONObject jsonStu = JSONObject.fromObject(testMQ);
String String();
第四种:net.sf.json.JSONArray 包
import net.sf.json.JSONArray;
//把JSON字符串转换为JAVA对象数组
JSONArray json = JSONArray.fromObject(userStr);//userStr是json字符串
List<Myclass> myclasses = (List<Myclass>)Collection(json,Myclass.class);
第⼀种:⽣产者发送json格式数据(将对象转成json然后发送,或者直接发送json数据),消费者接收json格式然后转换成对象进⾏消费。
第⼆种:⽣产者直接发送对象数据,消费者接收对象并进⾏消费。
需要注意的是,当⽣产者发送对象的话,需要将对象序列化,消费者将对象进⾏反序列化即可。
要发送的对象类
public class TestMQ implements Serializable {
private String name;
private Integer age;
//setter/getter以及toString()⽅法
}
发送消息的接⼝
/**
* 发送消息的接⼝,如果要发送消息就实现这个接⼝
* @author Administrator
*/
public interface MQProducer {
/
**
* 发送消息到指定队列
* @param queueKey
* @param
*/
public void sendDataToQueue(String exchange, String queueKey, Object object);
}
/**
* 实现了发送消息的接⼝,实现⾥⾯的⽅法进⾏发送消息
* @author Administrator
*/
@SuppressWarnings("ALL")
@Component
public class RabbitMQProducer implements MQProducer {
@Resource(name="amqpTemplate")
private AmqpTemplate amqpTemplate;
@Override
public void sendDataToQueue(String exchange, String queueKey, Object object) {
System.out.println("sendDataToQueue --"+amqpTemplate);
try {
System.out.println("------------消息发送成功");
} catch (Exception e) {
System.out.println(e);
}
}
}
@Resource
private MQProducer rabbitMQProducer;
/**
* 这⾥使⽤rabbitmq是通过配置⽂件的形式进⾏使⽤的
* 主要的内容是:在l中配置队列的相关信息例如connection、exchange等以及队列消息的等相关配置
* 定义⼀个发送消息的接⼝,使⽤时实现这个接⼝,在实现类⾥重写AmqpTemplate amqpTemplate 的sendDataToQueue⽅法。 *
* @throws Exception
*/
@Test
public void MQProducer() throws Exception{
String exchangeName="clsExchange";
String bindingKey="merchant.queue.jasonqueue";
//需要发送的对象
TestMQ testMQ=new TestMQ();
testMQ.setAge(8101);
testMQ.setName("javatojson");
//将对象通过字节流和对象输出流写出去
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream oo = new ObjectOutputStream(bo);
oo.writeObject(testMQ);
byte[] ByteArray();
//⽣产者直接发送对象
rabbitMQProducer.sendDataToQueue(exchangeName,bindingKey,javaByte);
}
通过监听消费这个消息
import org.Message;
import org.MessageListener;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class TestClsConsumer implements MessageListener {
@Override
public void onMessage(Message message) {
//字节码转化为对象
byte[] Body();
object toByteArrayInputStream bi = new ByteArrayInputStream(bytes);
ObjectInputStream oi = null;
try {
oi = new ObjectInputStream(bi);
TestMQ testMQ=(TestMQ) oi.readObject();
System.out.println("消费者直接接收对象进⾏消费(进⾏处理⼀些业务):"+Name());
} catch (Exception e) {
e.printStackTrace();
}
}
}
参考博⽂:
(1)(json格式转换成对象相关⽅法)
(2)(json数组和List集合转换)
(3)(rabbitmq发送对象)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论