一、基础使用
1 引入依赖: pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2 配置:application.yml
spring:
rabbitmq:
host: 0.1.2.3
port: 5672
username: guest
password: guest
virtual-host: /
connection-timeout: 15000
listener:
simple:
concurrency: 5
max-concurrency: 10
prefetch: 1
# acknowledge-mode: manual
3 生产消息
3.1 编写消息生成类:RabbitmqController
package com.chongdian.api.controller;
import com.chongdian.api.core.http.ResultResponse;
import com.chongdian.api.producer.rabbitmq.RabbitmqSender;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RequestMapping("/rabbit")
@RestController
public class RabbitmqController {
@Autowired
private RabbitmqSender RabbitmqSender;
@RequestMapping("/send")
public ResultResponse sendProduct() {
Map message = new HashMap ();
message.put ("id", 1);
message.put ("name", "test");
RabbitmqSender.send (message);
return ResultResponse.ok("ok");
}
}
3.2 编写消息生产方法 KafkaSender
package com.chongdian.api.producer.rabbitmq;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.UUID;
@Service
public class RabbitmqSender {
@Autowired
private RabbitTemplate rabbitTemplate;
public void send(Map message){
System.out.print ("发送开始");
rabbitTemplate.convertAndSend("luo.study", "queues1", message );
System.out.print ("发送完成");
//, new CorrelationData (UUID.randomUUID().toString())
}
}
4 编写消息监听消费类
4.1 在主程序类注入开启监听
package com.chongdian.api;
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableFeignClients
@EnableRabbit //开启rabbit监听
public class ApiApplication {
public static void main(String[] args) {
SpringApplication.run(ApiApplication.class, args);
}
}
4.2 自动监听处理程序
package com.chongdian.api.listener.rabbitmq;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;
import java.util.Map;
@Service
public class RabbitmqConsumer {
@RabbitListener (queues = "queues1")
public void receive(Map message){
System.out.print (message);
}
}
5 修改消息内容转译形式为json
添加config文件类
package com.chongdian.api.config;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbimqConfig {
@Bean
public Jackson2JsonMessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}
二、 手动签收
配置
rabbitmq:
host: 1.1.1.1
port: 5672
username: guest
password: guest
virtual-host: /
connection-timeout: 15000
publisher-returns: true
listener:
simple:
concurrency: 5
max-concurrency: 10
prefetch: 1
acknowledge-mode: manual
direct:
acknowledge-mode: manual
监听端口代码
package com.chongdian.api.listener.rabbitmq;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.handler.annotation.Headers;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Service;
import sun.plugin2.message.Message;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Service
public class RabbitmqConsumer {
/**
* 方法1
* 直接指定queueskey自动接收消息
*/
// @RabbitListener (queues = "queues1")
// public void receive(Map message){
// System.out.print (message);
// }
/**
* 方法2
* @RabbitListener 指明监听的exchange、qeuues、queueskey,
* @RabbitListener 可自动创建并自动绑定好关系
* me.* 标识匹配一级绑定关系 me# 标识多级匹配
*
*/
@RabbitListener(bindings = @QueueBinding(
value = @Queue(value = "me.queues", durable = "true"),
exchange = @Exchange(name="luo.study", durable = "true", type="topic"),
key = "me.*"
))
@RabbitHandler
public void receive2(
@Payload Map result,
@Headers Map<String, Object> headers,
Channel channel
) throws Exception {
System.out.println("接收消息开始消费");
System.out.println(result);
Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);
channel.basicAck(deliveryTag, false);
}
}
三、 Rabbitmq配置类及AmqpAdmin管理组件的使用
package com.chongdian.api.Rest;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class RabbitmqRest {
@Autowired
private AmqpAdmin amqpAdmin;
/**
* 创建exchange
*/
public void createExchange()
{
amqpAdmin.declareExchange(new DirectExchange("amqpadmin.exchange"));
System.out.println("创建exchange完成");
}
/**
* 创建Queue
*/
public void createQueue()
{
amqpAdmin.declareQueue(new Queue("amqpadmin.queue1",true ));
System.out.println("创建createQueue完成");
}
/**
* 绑定
*/
public void createBind()
{
amqpAdmin.declareBinding(
new Binding(
"amqpadmin.queue1",
Binding.DestinationType.QUEUE,
"amqpadmin.exchange",
"amqpadmin.haha",
null
)
);
}
/**
*其他自己整理
*/
}