原生 Java 客户端进行消息通信

Direct 交换器

  DirectProducer:direct类型交换器的生产者

  NormalConsumer:普通的消费者

  MulitBindConsumer:队列绑定到交换器上时,是允许绑定多个路由键的,也就是多重绑定MulitChannelConsumer:一个连接下允许有多个信道

  MulitConsumerOneQueue:一个队列多个消费者,则会表现出消息在消费者之间的轮询发送。

生产者和消费者一般用法

  DirectProducer:direct类型交换器的生产者

  NormalConsumer:普通的消费者

  使用 DirectProducer作为生产者,NormalConsumer作为消费者,消费者绑定一个队列

队列和交换器的多重绑定

  DirectProducer:direct类型交换器的生产者

  NormalConsumer:普通的消费者

  MultiBindConsumer:队列绑定到交换器上时,是允许绑定多个路由键的,也就是多重绑定对比:单个绑定的消费者只能收到指定的消息,多重绑定的的消费者可以收到所有的消息。

一个连接多个信道

  DirectProducer:direct类型交换器的生产者

  MultiChannelConsumer:一个连接下允许有多个信道

  一个连接,我们可以使用多线程的方式模拟多个信道进行通讯。这样可以做到多路复用。

一个队列多个消费者

  MultiConsumerOneQueue:一个队列多个消费者,则会表现出消息在消费者之间的轮询发送。

Fanout

  消息广播到绑定的队列

   不管我们如何调整生产者和消费者的路由键,都对消息的接受没有影响。

Topic

  通过使用“*”和“#”,使来自不同源头的消息到达同一个队列,”.”将路由键分为了几个标识符,“*”匹配 1个,“#”匹配一个或多个。例子如

    假设有交换器 topic_course,

    讲课老师有 king,mark,james,

    技术专题有 kafka,jvm,redis,

    课程章节有 A、B、C,

   路由键的规则为 讲课老师+“.”+技术专题+“.”+课程章节,如:king.kafka.A。

*与#的区别:

  如果我们发送的路由键变成 king.kafka.A

  那么队列中如果绑定了 king.* 不能匹配

  队列中如果绑定了 king.# 能够匹配

1、要关注所有的课程,怎么做?

  声明一个队列并绑定到交换器上:channel.queueBind(queueName,TopicProducer.EXCHANGE_NAME, "#");

2、关注 king 老师的所有课程,怎么办?

  声明一个队列并绑定到交换器上:channel.queueBind(queueName,TopicProducer.EXCHANGE_NAME, "king.#");

注意:如果这里改为 king.* 的话,则不会出现任何信息,因为 “*”匹配 1个(使用.分割的标识的个数)

3、关注 king 老师所有的 A 章节,怎么办?

  声明一个队列并绑定到交换器上:channel.queueBind(queueName,TopicProducer.EXCHANGE_NAME, "king.#.A");

  或者声明一个队列并绑定到交换器上:channel.queueBind(queueName,TopicProducer.EXCHANGE_NAME, "king.*.A");

4、关注 kafka 所有的课程,怎么办?

  声明一个队列并绑定到交换器上:channel.queueBind(queueName,TopicProducer.EXCHANGE_NAME, "#.kafka.#");

5、关注所有的 B 章节,怎么办?

  声明一个队列并绑定到交换器上:channel.queueBind(queueName,TopicProducer.EXCHANGE_NAME, "#.B");

6、关注 king 老师 kafka 的 A 章节,怎么办?

  声明一个队列并绑定到交换器上:channel.queueBind(queueName,TopicProducer.EXCHANGE_NAME, "king.kafka.A");

原生 Java 客户端进行消息通信的更多相关文章

  1. 消息中间件系列三:使用RabbitMq原生Java客户端进行消息通信(消费者(接收方)自动确认模式、消费者(接收方)自行确认模式、生产者(发送方)确认模式)

    准备工作: 1)安装RabbitMQ,参考文章:消息中间件系列二:RabbitMQ入门(基本概念.RabbitMQ的安装和运行) 2.)分别新建名为OriginalRabbitMQProducer和O ...

  2. 使用Java客户端发送消息和消费的应用

    体验链接:https://developer.aliyun.com/adc/scenario/fb1b72ee956a4068a95228066c3a40d6 实验简介 本教程将Demo演示使用jav ...

  3. [转]C服务端与java客户端的socket通信注意事项

    http://blog.csdn.net/gaoxin1076/article/details/7671752 Socket网络通讯开发总结之:Java 与 C进行Socket通讯 注意以下问题: 1 ...

  4. java学习笔记——Java多客户端与服务器通信

    先说一下大概的思路: 应用多线程来实现服务器与多客户端之间的通信 1.服务器端创建ServerSocket,循环调用accept()等待客户端连接: 2.客户端创建一个Socket并请求与服务器端连接 ...

  5. elasticsearch 口水篇(4)java客户端 - 原生esClient

    上一篇(elasticsearch 口水篇(3)java客户端 - Jest)Jest是第三方客户端,基于REST Api进行调用(httpClient),本篇简单介绍下elasticsearch原生 ...

  6. NIO【同步非阻塞io模型】关于 NIO socket 的详细总结【Java客户端+Java服务端 + 业务层】【可以客户端间发消息】

    1.前言 以前使用 websocket来实现双向通信,如今深入了解了 NIO 同步非阻塞io模型 , 优势是 处理效率很高,吞吐量巨大,能很快处理大文件,不仅可以 做 文件io操作, 还可以做sock ...

  7. Java如何使套接字向单个客户端显示消息?

    在Java编程中,如何使用套接字向单个客户端显示消息? 以下示例演示了如何使用Socket类的ssock.accept()方法向单个套接字客户端上显示消息. package com.yiibai; i ...

  8. 原生java调用webservice的方法,不用生成客户端代码

    原生java调用webservice的方法,不用生成客户端代码 2015年10月29日 16:46:59 阅读数:1455 <span style="font-family: Aria ...

  9. ZeroMQ:云时代极速消息通信库

    ZeroMQ:云时代极速消息通信库(大规模|可扩展|低成本|高效率解决之道,大规模分布式|多线程应用程序|消息传递架构构建利器) [美]Pieter Hintjens(皮特.亨特金斯)著   卢涛 李 ...

随机推荐

  1. 谁来教我渗透测试——黑客必须掌握的HTML基础(一)

    小伙伴们,好几天不见了,这一周菜鸟小白工作很忙,所以没有每天更新学习内容,但是菜鸟小白的学习是没有停下来的,只是没有时间来整理学习笔记了.现在就将菜鸟小白这两天学习的HTML基础和大家分享,其中还会拿 ...

  2. 聊聊Java内省Introspector

    前提 这篇文章主要分析一下Introspector(内省,应该读xing第三声,没有找到很好的翻译,下文暂且这样称呼)的用法.Introspector是一个专门处理JavaBean的工具类,用来获取J ...

  3. Filebeat 收集K8S 日志,生产环境实践

    根据生产环境要求,需要采集K8Spod 日志,和开发协商之后,pod中应用会将日志输出到容器终端上,这时可以直接用filebeat 采集node节点上面的/var/log/containers/*.l ...

  4. CodeReview 的经验和原则

    资深的程序员都知道 Code Review 可以对代码质量,代码规范,团队代码能力提升带来很大的提升,还有著名的技术专家"左耳朵耗子"也说过: 我认为没有 Code Review ...

  5. 【java】java获取JVM启动参数 System.getProperty

    java获取JVM启动参数 System.getProperty取 -D后的key即可 public class Test { public static void main(String[] arg ...

  6. SpringSecurity权限管理系统实战—七、处理一些问题

    目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...

  7. linux驱动之内核多线程(四)

    本文摘自 http://www.cnblogs.com/zhuyp1015/archive/2012/06/13/2548494.html 自己创建的内核线程,当把模块加载到内核之后,可以通过:ps ...

  8. MapReduce框架原理

    MapReduce框架原理 3.1 InputFormat数据输入 3.1.1 切片与MapTask并行度决定机制 1.问题引出 MapTask的并行度决定Map阶段的任务处理并发度,进而影响到整个J ...

  9. Java 8新特性(三):Optional类

    在上一篇介绍Stream流式数据处理的文章中提到了Optional类,这是Java 8新增的一个类,用以解决程序中常见的NullPointerException异常问题.本篇文章将详细介绍Option ...

  10. 第四篇Scrum冲刺博客--Interesting-Corps

    第四篇Scrum冲刺博客 站立式会议 1.会议照片 2.队友完成情况 团队成员 昨日完成 今日计划 鲍鱼铭 搜索页面跳转.设计及布局实现 音乐详情页面跳转.设计及布局实现设计 叶学涛 编写设置页面 编 ...