服务异步通讯——springcloud

服务异步通讯——springcloud


在这里插入图片描述

初始MQ

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

RabbitMQ快速入门

官网https://www.rabbitmq.com/

单机部署

我们在Centos7虚拟机中使用Docker来安装。

1.1.下载镜像

方式一:在线拉取

docker pull rabbitmq:3-management

方式二:从本地加载

在课前资料已经提供了镜像包:
在这里插入图片描述

上传到虚拟机中后,使用命令加载镜像即可:

docker load -i mq.tar
安装MQ

执行下面的命令来运行MQ容器:

docker run \
 -e RABBITMQ_DEFAULT_USER=itcast \
 -e RABBITMQ_DEFAULT_PASS=123321 \
 --name mq \
 --hostname mq1 \
 -p 15672:15672 \
 -p 5672:5672 \
 -d \
 rabbitmq:3-management

SpringAMQP

在这里插入图片描述
https://spring.io/projects/spring-amqp/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

 <!--AMQP依赖,包含RabbitMQ-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

在这里插入图片描述

spring:
  rabbitmq:
    host: 192.168.10.88 # rabbitMQ的ip地址
    port: 5672 # 端口
    username: itcast
    password: 123321
    virtual-host: /
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringAmqpTest {
   


    @Autowired
    private RabbitTemplate rabbitTemplate;


    @Test
    public void testSendMessage2SimpleQueue(){
   
        String queueName = "simple.queue";
        String message = "hello, spring amqp!";
        rabbitTemplate.convertAndSend(queueName,message);
    }
}

在这里插入图片描述
在这里插入图片描述

package cn.itcast.mq.listener;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class SpringRabbitListener {
   

    @RabbitListener(queues = "simple.queue")
    public void listenSimpleQueue(String msg){
   
        System.out.println("消费者接受到消息:[" + msg + "]");
    }
}

在这里插入图片描述

work Queue 工作队列

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Fanout Exchange广播模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

@Configuration
public class FanoutConfig {
   

    // itcast.fanout
    @Bean
    public FanoutExchange fanoutExchange(){
   
        return new FanoutExchange("itcast.fanout");
    }

    // fanout.queue1
    @Bean
    public Queue fanoutQueue1(){
   
        return new Queue("fanout.queue1");
    }


    // 绑定队列1到交换机
    @Bean
    public Binding fanoutBinding1(Queue fanoutQueue1, FanoutExchange fanoutExchange){
   
        return BindingBuilder
                .bind(fanoutQueue1)
                .to(fanoutExchange);
    }

    // fanout.queue2
    @Bean
    public Queue fanoutQueue2(){
   
        return new Queue("fanout.queue2");
    }
    // 绑定队列2到交换机
    @Bean
    public Binding fanoutBinding2(Queue fanoutQueue2, FanoutExchange fanoutExchange){
   
        return BindingBuilder
                .bind(fanoutQueue2)
                .to(fanoutExchange);
    }


}

在这里插入图片描述

   @RabbitListener(queues = "fanout.queue1")
    public void listenFanoutQueue1(String msg){
   
        System.out.println("消费者接受到fanoutQueue1 消息:[" + msg + "]");
    }

    @RabbitListener(queues = "fanout.queue2")
    public void listenFanoutQueue2(String msg){
   
        System.out.println("消费者接受到fanoutQueue2 消息:[" + msg + "]");
    }
    

在这里插入图片描述

    @Test
    public void testSendFanoutExchange(){
   
        //交换机名称
        String exchanneName = "itcast.fanout";
        //消息
        String message = "hello every one!";
        // 发送消息
        rabbitTemplate.convertAndSend(exchanneName,"",message);
    }

在这里插入图片描述

DirectExchange路由模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "direct.queue1"),
            exchange = @Exchange(name = "itcast.direct",type = ExchangeTypes.DIRECT),
            key = {
   "red","blue"}
    ))
    public void LinstenDirectQueue1(String msg){
   
        System.out.println("消费者接受到directQueue1 消息:[" + msg + "]");
    }

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "direct.queue2"),
            exchange = @Exchange(name = "itcast.direct",type = ExchangeTypes.DIRECT),
            key = {
   "red","yellow"}
    ))
    public void LinstenDirectQueue2(String msg){
   
        System.out.println("消费者接受到directQueue2 消息:[" + msg + "]");
    }

在这里插入图片描述

    @Test
    public void testSendDirectExchange(){
   
        //交换机名称
        String exchanneName = "itcast.direct";
        //消息
        String message = "hello,red";
        // 发送消息
        rabbitTemplate.convertAndSend(exchanneName,"red",message);
    }

在这里插入图片描述

TopicExchange话题模式

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

 @RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "topic.queue1"),
            exchange = @Exchange(name = "itcast.topic",type = ExchangeTypes.TOPIC),
            key = "china.#"
    ))
    public void LinstenTopicQueue1(String msg){
   
        System.out.println("消费者接受到topicQueue1消息:[" + msg + "]");
    }

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "topic.queue2"),
            exchange = @Exchange(name = "itcast.topic",type = ExchangeTypes.TOPIC),
            key = "#.news"
    ))
    public void LinstenTopicQueue2(String msg){
   
        System.out.println("消费者接受到topicQueue2消息:[" + msg + "]");
    }

在这里插入图片描述

 @Test
    public void testSendTopicExchange(){
   
        //交换机名称
        String exchanneName = "itcast.topic";
        //消息
        String message = "小米汽车倒闭了";
        // 发送消息
        rabbitTemplate.convertAndSend(exchanneName,"china.news",message);
    }

在这里插入图片描述

消息转换器

在这里插入图片描述

    @Test
    public void testSendOnjectQueue() {
   
        Map<String, Object> msg = new HashMap<>();
        msg.put("name","柳岩");
        msg.put("age",18);
        rabbitTemplate.convertAndSend("object.queue",msg);
    }

在这里插入图片描述

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
 @Bean
    public MessageConverter messageConverter(){
   
        return new Jackson2JsonMessageConverter();
    }

在这里插入图片描述

   @RabbitListener(queues = "object.queue")
    public void ListenObjectQueue(Map<String,Object> msg){
   
        System.out.println("接收到object.queue的消息:" + msg);
    }

在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-12 21:58:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-12 21:58:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-12 21:58:04       82 阅读
  4. Python语言-面向对象

    2024-01-12 21:58:04       91 阅读

热门阅读

  1. GO基础进阶篇 (十二)、反射

    2024-01-12 21:58:04       56 阅读
  2. 如何一键合并多个excel文件

    2024-01-12 21:58:04       54 阅读
  3. [linux] git clone一个repo,包括它的子模块submodule

    2024-01-12 21:58:04       61 阅读
  4. 用PYTHON学算法DAY1--位运算相关

    2024-01-12 21:58:04       53 阅读
  5. QT day5

    QT day5

    2024-01-12 21:58:04      55 阅读
  6. 用python实现把PDF转成图片,测试成功转化代码

    2024-01-12 21:58:04       43 阅读
  7. __declspec(dllexport)与__declspec(dllimport) 的区别

    2024-01-12 21:58:04       45 阅读
  8. C语言学习记录—进阶作业(通讯录静态版本)

    2024-01-12 21:58:04       54 阅读