官网
在官网上能找到遇到的所有问题,前提是英文能看懂。
Spring集成rabbitmq
https://docs.spring.io/spring-amqp/docs/current/reference/html/#introduction
自己项目中使用记录,消息模型为第五种TOPIC
官方代码参考地址:https://www.rabbitmq.com/api-guide.html
pom坐标
<!--rabbitmq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
生产者代码
private Connection connection;
private Channel channel;
@Value("${spring.rabbitmq.exchangeName}")
private String exchangeName;
@Value("${spring.rabbitmq.host}")
private String host;
@Value("${spring.rabbitmq.port}")
private int port;
@Value("${spring.rabbitmq.virtual-host}")
private String virtualHost;
@Value("${spring.rabbitmq.username}")
private String userName;
@Value("${spring.rabbitmq.password}")
private String password;
public void init() {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(host);
factory.setPort(port);
factory.setVirtualHost(virtualHost);
factory.setUsername(userName);
factory.setPassword(password);
try {
connection = factory.newConnection();
channel = connection.createChannel();
channel.exchangeDeclare(exchangeName, BuiltinExchangeType.TOPIC, false);
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
public void send(String msg) {
String rk1 = "a12.b34.c56";
try {
channel.basicPublish(exchangeName, rk1, null, msg.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
消费者代码
private Connection connection;
private Channel channel;
@Value("${spring.rabbitmq.exchangeName}")
private String exchangeName;
@Value("${spring.rabbitmq.host}")
private String host;
@Value("${spring.rabbitmq.port}")
private int port;
@Value("${spring.rabbitmq.virtual-host}")
private String virtualHost;
@Value("${spring.rabbitmq.username}")
private String userName;
@Value("${spring.rabbitmq.password}")
private String password;
//test
String rk1 = "a12.b34.c56";
public void init() {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(host);
factory.setPort(port);
factory.setVirtualHost(virtualHost);
factory.setUsername(userName);
factory.setPassword(password);
try {
connection = factory.newConnection();
channel = connection.createChannel();
channel.exchangeDeclare(exchangeName, BuiltinExchangeType.TOPIC, false);
//绑定交换机
queueName = channel.queueDeclare().getQueue();
channel.queueBind(queueName, exchangeName, rk1);
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
public void addRoutingKey(String routingKey) throws IOException {
channel.queueBind(queueName, exchangeName, routingKey);
}
public void queueUnbind(String routingKey) throws IOException {
channel.queueUnbind(queueName, exchangeName, routingKey);
}
public void startReceive() {
try {
channel.basicConsume(queueName, true, (tag, message) -> {
//收到消息
System.out.println("receive message: " + tag + " " + new String(message.getBody(), "UTF-8"));
System.out.println("routingkey:" + message.getEnvelope().getRoutingKey());
}, (tag) -> {
//
System.out.println("receive message: " + tag);
});
} catch (IOException e) {
e.printStackTrace();
}
}