所用依赖
<!--rabbitmq-->
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.4.0.RELEASE</version>
</dependency>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.6.0</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.6</version>
</dependency>
对象序列化与反序列化
public static byte[] getBytesFromObject(Serializable obj) throws Exception {
if (obj == null) {
return null;
}
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream oo = new ObjectOutputStream(bo);
oo.writeObject(obj);
return bo.toByteArray();
}
public static Object getObjectFromBytes(byte[] objBytes) throws Exception {
if (objBytes == null || objBytes.length == 0) {
return null;
}
ByteArrayInputStream bi = new ByteArrayInputStream(objBytes);
ObjectInputStream oi = new ObjectInputStream(bi);
return oi.readObject();
}
测试对象
package rabbitmq.objectTransfer.entity;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
public class TestEntity implements Serializable {
private static final long serialVersionUID = -6194946875333262575L;
private Long id;
private String name;
private String code;
private BigDecimal money;
private Date createDate;
}
消息接收端
package rabbitmq.objectTransfer;
import com.rabbitmq.client.*;
import org.springframework.amqp.utils.SerializationUtils;
import rabbitmq.objectTransfer.entity.FileEntity;
import rabbitmq.objectTransfer.entity.TestEntity;
import rabbitmq.units.FileConvertBase64;
import rabbitmq.units.RabbitMqUnits;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicInteger;
public class ConsumerTest {
public static void main(String[] args) throws IOException, TimeoutException {
try {
ConnectionFactory factory = RabbitMqUnits.createFactory();
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
String queueName = "object.queue";
channel.queueDeclare(queueName, false, false, false, null);
channel.basicConsume(queueName, true, new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
@SuppressWarnings("deprecation")
TestEntity entity = (TestEntity) SerializationUtils.deserialize(body);
System.out.println("接收到消息:【" + entity + "】");
}
});
System.out.println("等待接收消息。。。。");
} catch (Exception e) {
e.printStackTrace();
}
}
}
消息发送端
package rabbitmq.objectTransfer;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import org.junit.Test;
import org.springframework.amqp.utils.SerializationUtils;
import rabbitmq.objectTransfer.entity.DetailEntity;
import rabbitmq.objectTransfer.entity.FileEntity;
import rabbitmq.objectTransfer.entity.TestEntity;
import rabbitmq.units.FileConvertBase64;
import rabbitmq.units.RabbitMqUnits;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeoutException;
public class PublisherTest {
@Test
public void testSendMessage() throws IOException, TimeoutException {
Connection connection = null;
Channel channel = null;
try {
ConnectionFactory factory = RabbitMqUnits.createFactory();
connection = factory.newConnection();
channel = connection.createChannel();
String queueName = "object.queue";
channel.queueDeclare(queueName, false, false, false, null);
TestEntity entity = new TestEntity();
entity.setId(123456L);
entity.setName("对象传输");
entity.setCode("rabbitmq");
entity.setCreateDate(new Date());
entity.setMoney(new BigDecimal("9999.8888"));
channel.basicPublish("", queueName, null, SerializationUtils.serialize(entity));
System.out.println("发送消息成功:【" + entity.toString() + "】");
} catch (Exception e) {
e.printStackTrace();
} finally {
assert channel != null;
channel.close();
connection.close();
}
}
}
