zoukankan      html  css  js  c++  java
  • RabbitMQ使用

    下载RabbitMQ镜像

    docker pull hub.c.163.com/library/rabbitmq:3-management
     
    docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq fb11f4e0a6b6
     
    启动成功后访问:192.168.2.103:15672
     

    进入界面后,添加exchanges和queues,然后进行绑定

    Spring Boot与RabbitMQ整合

    1、引入 spring-boot-starter-amqp

    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>  
     
    2. application.yml配置

    * 自动配置
    * RabbitAutoConfiguration
    * 又自动配置了连接工厂ConnectionFactory;
    * RabbitProperties 封装了 RabbitMQ的配置:查看默认值,

    private String host = "localhost";
    private int port = 5672;
    private String username = "guest";
    private String password = "guest";

    * RabbitTemplate :给RabbitMQ发送和接受消息;

    3. 测试RabbitMQ
         /**
    	 * 1、单播(点对点)
    	 */
    	@Test
    	public void contextLoads() {
    		//Message需要自己构造一个;定义消息体内容和消息头
    		//rabbitTemplate.send(exchage,routeKey,message);
    
    		//object默认当成消息体,只需要传入要发送的对象,自动序列化发送给rabbitmq;
    		//rabbitTemplate.convertAndSend(exchage,routeKey,object);
    		Map<String,Object> map = new HashMap<>();
    		map.put("msg","这是第一个消息");
    		map.put("data", Arrays.asList("helloworld",123,true));
    		//对象被默认序列化以后发送出去
    		rabbitTemplate.convertAndSend("exchange.direct","atguigu.news",new Book("西游记","吴承恩"));
    
    	}
    
    	//接受数据,如何将数据自动的转为json发送出去
    	@Test
    	public void receive(){
    		Object o = rabbitTemplate.receiveAndConvert("atguigu.news");
    		System.out.println(o.getClass());
    		System.out.println(o);
    	}
    
    	/**
    	 * 广播
    	 */
    	@Test
    	public void sendMsg(){
    		rabbitTemplate.convertAndSend("exchange.fanout","",new Book("红楼梦","曹雪芹"));
    	}
    

      json序列化配置(简单的配置如下)

    @Configuration
    public class MyAMQPConfig {
    
        @Bean
        public MessageConverter messageConverter(){
            return new Jackson2JsonMessageConverter();
        }
    }
    

      

    4、 监听测试(service层)@EnableRabbit + @RabbitListener 监听消息队列的内容
    @Service
    public class BookService {
    
        @RabbitListener(queues = "atguigu.news")
        public void receive(Book book){
            System.out.println("收到消息:"+book);
        }
    
        @RabbitListener(queues = "atguigu")
        public void receive02(Message message){
            System.out.println(message.getBody());
            System.out.println(message.getMessageProperties());
        }
    }
    

     

    5、AmqpAdmin : RabbitMQ系统管理功能组件;
     AmqpAdmin:创建和删除 Queue,Exchange,Binding

    @Autowired
    	AmqpAdmin amqpAdmin;
    	@Test
    	public void createExchange(){
    
    		//创建exchange
    		amqpAdmin.declareExchange(new DirectExchange("amqpadmin.exchange"));
    		//创建queue
    		amqpAdmin.declareQueue(new Queue("amqpadmin.queue",true));
    		//创建绑定规则
    		amqpAdmin.declareBinding(new Binding("amqpadmin.queue", Binding.DestinationType.QUEUE,"amqpadmin.exchange","amqp.haha",null));
    	}
    

      

  • 相关阅读:
    Linux常用命令解释
    RAID 10 配置流程
    VMware workstation Windows 10虚拟机安装步骤
    yum仓库配置
    vi 常用命令
    Linux设备驱动动态插入内核与直接集成到内核方式的利弊分析
    常用的Linux命令行文本处理工具总结
    CentOS使用总结(不断更新)
    vsftpd出现“Response: 500 OOPS: cannot change directory”解决方法
    NFS共享服务挂载时出现“access denied by server while mounting”的解决方法
  • 原文地址:https://www.cnblogs.com/huoxiansudi/p/11894509.html
Copyright © 2011-2022 走看看