赞
踩
同步存在的问题:
同步调用优点:时效性较强,可以立即得到结果
异步通讯:引入事件代理者broker,支付完成后,支付服务只需发送一个通知即可,不需要再等待其他调用服务。
异步通信缺点:
MQ,中文就是消息队列,字面看就是存放消息队列==》时间驱动的Broker.
RabbitMQ的概念:
helloword案例:
官方的helloword是基于最基础的消息队列模型来实现的,只包括三个角色:
Publisher:
// 1.建立连接 ConnectionFactory factory = new ConnectionFactory(); // 1.1.设置连接参数,分别是:主机名、端口号、vhost、用户名、密码 factory.setHost("192.168.120.12"); factory.setPort(5672); factory.setVirtualHost("/"); factory.setUsername("haoyue"); factory.setPassword("123456"); // 1.2.建立连接 Connection connection = factory.newConnection(); // 2.创建通道Channel Channel channel = connection.createChannel(); // 3.创建队列 String queueName = "simple.queue"; channel.queueDeclare(queueName, false, false, false, null); // 4.发送消息 String message = "hello, rabbitmq!"; channel.basicPublish("", queueName, null, message.getBytes()); System.out.println("发送消息成功:【" + message + "】"); // 5.关闭通道和连接 channel.close(); connection.close();
consumer:
// 1.建立连接 ConnectionFactory factory = new ConnectionFactory(); // 1.1.设置连接参数,分别是:主机名、端口号、vhost、用户名、密码 factory.setHost("192.168.120.12"); factory.setPort(5672); factory.setVirtualHost("/"); factory.setUsername("haoyue"); factory.setPassword("123456"); // 1.2.建立连接 Connection connection = factory.newConnection(); // 2.创建通道Channel Channel channel = connection.createChannel(); // 3.创建队列 String queueName = "simple.queue"; channel.queueDeclare(queueName, false, false, false, null); // 4.订阅消息 channel.basicConsume(queueName, true, new DefaultConsumer(channel){ @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { // 5.处理消息 String message = new String(body); System.out.println("接收到消息:【" + message + "】"); } }); System.out.println("等待接收消息。。。。"); }
基本消息队列的消息发送流程:
AMQP:Advanced Message Queuing Protocol,是用于在应用程序之间传递业务消息的开放标准。该协议与语言和平台无关,更符合微服务中独立性的要求。
Spring AMQP:
Spring AMQP是基于AMQP协议定义的一套API规范,提供了模板来发送和接受消息。包含两部分,其中spring-amqp是基础抽象的,spring-rabbit是底层的默认实现。
利用Spr ingAMQP实现HelloWorld中的基础消息队列功能:
Work模型的使用:
发布订阅模式与之前案例的区别就是允许将同- -消息发送给多个消费者。实现方式是加入了exchange (交换机)。
常见exchange;
交换机的作用:
Direct Exchange 会将接收到的消息根据规则路由到指定的Queue,因此称为路由模式(routes) 。
●每一个Queue 都与Exchange设置- - 个BindingKey
●发布者发送消息时,指定消息的RoutingKey
●Exchange将 消息路由到BindingKey与消息RoutingKey-致的队列
描述下Direct交换机与Fanout交换机的差异:
●Fanout交换机将消息路由给每一个与之绑定的队列
●Direct交换机根据Rout ingKey判断路由给哪个队列
●如果多个队列具有相同的Rout ingKey,则与Fanout功能类似
TopicExchange与DirectExchange类似,区别在于rout ingKey必须是多个单词的列表,并且以.分割。
Queue与Exchange指定BindingKey时可以使用通配符:
#:代指0个或多个单词
*:代指-一个单词
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。