这里写了一个简单的springboot的demo来处理RabbitMq的简单队列
记录一下步骤。
添加pom依赖
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.8.0</version>
</dependency>
创建连接管理类
package com.my.tool;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
/**
* Create by hadoop
*/
public class ConnectionUtil {
public static Connection getConnection(String host,int port,String vHost,String userName,String passWord) throws Exception{
//1、定义连接工厂
ConnectionFactory factory = new ConnectionFactory();
//2、设置服务器地址
factory.setHost(host);
//3、设置端口
factory.setPort(port);
//4、设置虚拟主机、用户名、密码
factory.setVirtualHost(vHost);
factory.setUsername(userName);
factory.setPassword(passWord);
//5、通过连接工厂获取连接
Connection connection = factory.newConnection();
return connection;
}
}
创建生产者
package com.my.tool;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
@Component
public class Producer {
private final static String QUEUE_NAME = "hello";
Channel channel = null;
Connection connection = null;
@PostConstruct
void init() throws Exception {
System.out.println("Producer init");
//1、获取连接
connection = ConnectionUtil.getConnection("127.0.0.1",5672,"/","guest","guest");
//2、声明信道
channel = connection.createChannel();
//3、声明(创建)队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
}
@PreDestroy
void uninit() throws IOException, TimeoutException {
System.out.println("Producer uninit");
channel.close();
connection.close();
}
public void SendData(String message) throws IOException {
channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
}
}
消费者需要两个类来提供支撑
package com.my.tool;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DefaultConsumer;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
@Component
public class Consumer{
private final static String QUEUE_NAME = "hello";
Channel channel = null;
Connection connection = null;
MyConsumer myConsumer = null;
@PostConstruct
void init() throws Exception {
System.out.println("Consumer init");
//1、获取连接
connection = ConnectionUtil.getConnection("127.0.0.1", 5672, "/", "guest", "guest");
//2、声明信道
channel = connection.createChannel();
//3、声明(创建)队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
myConsumer = new MyConsumer(channel);
channel.basicConsume(QUEUE_NAME,true,myConsumer);
}
@PreDestroy
void uninit() throws IOException, TimeoutException {
System.out.println("Consumer uninit");
channel.close();
connection.close();
}
}
package com.my.tool;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import java.io.IOException;
public class MyConsumer extends DefaultConsumer {
public MyConsumer(Channel channel) {
super(channel);
}
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("-----------consume message----------");
System.out.println("consumerTag: " + consumerTag);
System.out.println("envelope: " + envelope);
System.out.println("properties: " + properties);
System.out.println("body: " + new String(body));
}
}
测试如下:
postman发送测试数据:
springboot打印输出: