Это 13-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления
Статьи по Теме
Краткое содержание серии MyBatis:Серия MyBatis
предисловие
-
имитировать сцену
- Теперь есть три уровня информации в журналах, ношение, ошибка
- Теперь я хочу сохранить лог ошибок локально, а инфу и ношение сбросить напрямую (то есть прямое потребление, без обработки, без потребления, будет формироваться бэклог)
- Думая об этом таким образом, можем ли мы определить привязку потребителя, чтобы специально обрабатывать сохранение журналов ошибок, а другую информацию о привязке потребителя и ношение носить напрямую без какой-либо обработки?
1. Производители
-
public static void publishMessageIndividually() throws Exception { Channel channel = RabbitMqUtils.getChannel(); channel.exchangeDeclare(ChangeNameConstant.DIRECT_MODEL, BuiltinExchangeType.DIRECT); //创建多个 bindingKey Map<String, String> bindingKeyMap = new HashMap<>(); bindingKeyMap.put("info","普通 info 信息"); bindingKeyMap.put("warning","警告 warning 信息"); bindingKeyMap.put("error","错误 error 信息"); //debug 没有消费这接收这个消息 所有就丢失了 bindingKeyMap.put("debug","调试 debug 信息"); for (Map.Entry<String, String> bindingKeyEntry: bindingKeyMap.entrySet()){ String bindingKey = bindingKeyEntry.getKey(); String message = bindingKeyEntry.getValue(); channel.basicPublish(ChangeNameConstant.DIRECT_MODEL,bindingKey, null, message.getBytes("UTF-8")); System.out.println("生产者发出消息:" + message); } }
- Вы видите: на переключателе direct_pattern задано три маршрута
2. Потребители
- потребитель А
-
/** * 这是一个测试的消费者 *@author DingYongJun *@date 2021/8/1 */ public class DyConsumerTest_direct01 { public static void main(String[] args) throws Exception{ //使用工具类来创建通道 Channel channel = RabbitMqUtils.getChannel(); String queueName = "disk"; channel.queueDeclare(queueName, false, false, false, null); //这个专门处理error日志,将其保存至本地 channel.queueBind(queueName, ChangeNameConstant.DIRECT_MODEL, "error"); System.out.println("A等待接收消息,把接收到的消息打印在屏幕....."); DeliverCallback deliverCallback = (consumerTag, delivery) -> { String message = new String(delivery.getBody(), "UTF-8"); System.out.println(message+"已经保存到本地啦"); }; channel.basicConsume(queueName, true, deliverCallback, consumerTag -> { System.out.println("消息中断了~"); }); } }
- потребитель Б
-
/** * 这是一个测试的消费者 *@author DingYongJun *@date 2021/8/1 */ public class DyConsumerTest_direct02 { public static void main(String[] args) throws Exception{ //使用工具类来创建通道 Channel channel = RabbitMqUtils.getChannel(); String queueName = "console"; channel.queueDeclare(queueName, false, false, false, null); //这个专门处理error日志,将其保存至本地 channel.queueBind(queueName, ChangeNameConstant.DIRECT_MODEL, "warning"); channel.queueBind(queueName, ChangeNameConstant.DIRECT_MODEL, "info"); System.out.println("B等待接收消息,把接收到的消息打印在屏幕....."); DeliverCallback deliverCallback = (consumerTag, delivery) -> { String message = new String(delivery.getBody(), "UTF-8"); System.out.println(message+"已经消费完并丢弃了"); }; channel.basicConsume(queueName, true, deliverCallback, consumerTag -> { System.out.println("消息中断了~"); }); } }
- Потребительский АБ готов.
-
Результаты
- режиссер
- потребитель А
- потребитель Б
- Он идеально подходит для нашей смоделированной сцены! здорово!
3. Резюме
-
множественная привязка
- В этом случае привязки производитель публикует сообщение для обмена, а сообщение с оранжевым ключом привязки будет опубликовано в очереди Q1.
- Сообщения с ключами привязки черный, зеленый и , будут опубликованы в очереди Q2, а сообщения других типов будут отброшены.
-
Является ли она более разумной, чем модель «публикация-подписка»?
-
Конечно, если тип привязки обмена прямой, но ключи нескольких привязанных к нему очередей все одинаковые.
-
В этом случае, хотя тип привязки прямой, он ведет себя немного как разветвление, точно так же, как широковещательная рассылка.
-
То есть дело в том, что сложный режим может быть обратно совместим с простым режимом!
Впереди долгий путь, и я обязательно буду его искать вдоль и поперёк~
Если вы думаете, что я блогеры хорошо пишу! Писать нелегко, пожалуйста, ставьте лайки, подписывайтесь и комментируйте, чтобы поощрять блоггеров ~ хахах