RabbitMQ
一、创建新用户
在Admin菜单Users子菜单下,填入用户名,密码,确认密码和选择对应权限Tags标记,点击Add user按钮进行添加。

二、创建新虚拟机
在Admin菜单下Virtual Hosts子菜单下,在图中表单位置,填入虚拟机名(注意,虚拟机名一定要以/开头),接着填入描述,和Tags标记,完毕,点击Add Virtual Hosts按钮,就可以添加一个新的虚拟机了。

三、给新建的虚拟机添加可访问权限用户
这里用于测试,就添加我们刚刚创建的用户xulinjun好了,从虚拟机列表点击我们刚刚创建的虚拟机(/myhost),进入虚拟机详情,在下图位置选择我们创建的新用户,点击Set permission,完毕。

四、Spring Boot AMQP
Spring有很多不同的项目,其中就有对AMQP的支持
新建一个Spring Boot项目,在此基础上进行如下操作
4.1、导包
分别导入了web环境启动器、rabbitMQ启动器、JSON转换器
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.10</version>
</dependency>
</dependencies>
4.2、添加rabbitMQ配置信息
server:
port: 8081
spring:
application:
name: producer-application
rabbitmq:
virtual-host: /myhost # 虚拟机名称
username: xulinjun # 用户名
password: 123456 # 密码
addresses: 192.168.206.99:5672 # 地址及端口
4.3、添加启动类
package com.learn;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class RabbitApplication {
public static void main(String[] args) {
SpringApplication.run(RabbitApplication.class);
}
@Bean
public Jackson2JsonMessageConverter jsonMessageConverter(){
// 创建JSON的消息转换器
return new Jackson2JsonMessageConverter();
}
}
4.4、在web层添加控制器方法
这里添加了2个方法,sendMsg往mq中发送字符串类型的数据,sendMap往mq中发送map类型的数据,但是刚刚配置JSON转换器,也是会自动转换String,向mq中发送。
注意的是,队列必须提前存在,不会自动创建
package com.learn.web;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
public class ProducerController {
// rabbit客户端对象
@Autowired
private RabbitTemplate rabbitTemplate;
@RequestMapping("/send/{msg}")
public String sendMsg(@PathVariable("msg") String msg){
// 参数1:队列名称,操作的队列必须存在
// 参数2:存放的消息信息
rabbitTemplate.convertAndSend("boot_queue", msg);
return "ok";
}
@RequestMapping("/sendmap")
public String sendMap(){
Map<String, String> map = new HashMap<String, String>();
map.put("name", "jack");
map.put("age", "27");
rabbitTemplate.convertAndSend("boot_queue", map);
return "ok";
}
}
4.5、访问浏览器,向mq中发送消息
分别在浏览器中访问 http://localhost:8081/send/hello、http://localhost:8081/sendmap,往mq中发送消息


在mq管理界面里面就可以看到存储的消息了

4.6、在consumer包中添加消费消息代码
package com.learn.consumer;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class TestConsumer {
@RabbitListener(queues = "boot_queue") // 注意,只需要队列名称一致即可
public void receive(String msg, Channel chanel, Message message) throws InterruptedException {
// 会话唯一ID
long deliveryTag = message.getMessageProperties().getDeliveryTag();
System.out.println("收到消息id:" + deliveryTag);
Thread.sleep(500);
System.out.println("message:" + msg);
}
}
4.7、重启项目启动器,消费消息


浙公网安备 33010602011771号