RabbitMQ
是實現了AMQP
(高級消息隊列協議)的開源消息中間件,RabbitMQ服務器是用Erlang
(面向併發的編程語言)編寫的。html
RabbitMQ官網下載地址:https://www.rabbitmq.com/download.htmljava
Docker部署則執行以下命令便可git
# RABBITMQ_DEFAULT_USER:用戶名,RABBITMQ_DEFAULT_PASS:密碼 這裏修改成本身的便可 docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -v `pwd`/rabbitmq/data:/var/lib/rabbitmq --hostname my-rabbit --restart=always -e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin rabbitmq:3-management
舒適小提示:本文只是簡單的經過rabbitmq
去發送消息
和接收消息
,適用於新手簡單入門瞭解~
pom.xml
中引入 rabbitmq
依賴<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
application.yml
中配置 rabbitmq
spring: # RabbitMQ配置 rabbitmq: host: 127.0.0.1 port: 5672 # 填寫本身安裝rabbitmq時設置的帳號密碼,默認帳號密碼爲`guest` username: admin password: admin virtual-host: my_vhost # 填寫本身的虛擬機名,對應可查看 `127.0.0.1:15672/#/users` 下Admin中的`Can access virtual hosts`信息
生產者發送消息到隊列,消費者從隊列中獲取消息
@Configuration public class RabbitConfig { public static final String QUEUE_KEY = "hello_world"; @Bean public Queue queue() { // durable: true 標識開啓消息隊列持久化 (隊列當中的消息在重啓rabbitmq服務的時候還會存在) return new Queue(QUEUE_KEY, true); } }
@Slf4j @Component public class MsgSender { @Autowired private AmqpTemplate rabbitTemplate; public void send() { String msgContent = "Hello World ~"; log.info("生產者發送消息 : " + msgContent); this.rabbitTemplate.convertAndSend(RabbitConfig.QUEUE_KEY, msgContent); } }
@Slf4j @Component @RabbitListener(queues = RabbitConfig.QUEUE_KEY) public class MsgReceiver { @RabbitHandler public void process(String msg) { log.info("消費者接收消息 : " + msg); } }
@RestController public class RabbitController { @Autowired private MsgSender msgSender; @GetMapping(value = "/sendMsg", produces = "application/json;charset=utf-8") @ApiOperation(value = "發送消息", httpMethod = "GET", response = ApiResult.class) public ApiResult sendMsg() { msgSender.send(); return ApiResult.ok(); } }