原生 Java 客户端进行消息通信
原生 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 客户端进行消息通信的更多相关文章
- 消息中间件系列三:使用RabbitMq原生Java客户端进行消息通信(消费者(接收方)自动确认模式、消费者(接收方)自行确认模式、生产者(发送方)确认模式)
准备工作: 1)安装RabbitMQ,参考文章:消息中间件系列二:RabbitMQ入门(基本概念.RabbitMQ的安装和运行) 2.)分别新建名为OriginalRabbitMQProducer和O ...
- 使用Java客户端发送消息和消费的应用
体验链接:https://developer.aliyun.com/adc/scenario/fb1b72ee956a4068a95228066c3a40d6 实验简介 本教程将Demo演示使用jav ...
- [转]C服务端与java客户端的socket通信注意事项
http://blog.csdn.net/gaoxin1076/article/details/7671752 Socket网络通讯开发总结之:Java 与 C进行Socket通讯 注意以下问题: 1 ...
- java学习笔记——Java多客户端与服务器通信
先说一下大概的思路: 应用多线程来实现服务器与多客户端之间的通信 1.服务器端创建ServerSocket,循环调用accept()等待客户端连接: 2.客户端创建一个Socket并请求与服务器端连接 ...
- elasticsearch 口水篇(4)java客户端 - 原生esClient
上一篇(elasticsearch 口水篇(3)java客户端 - Jest)Jest是第三方客户端,基于REST Api进行调用(httpClient),本篇简单介绍下elasticsearch原生 ...
- NIO【同步非阻塞io模型】关于 NIO socket 的详细总结【Java客户端+Java服务端 + 业务层】【可以客户端间发消息】
1.前言 以前使用 websocket来实现双向通信,如今深入了解了 NIO 同步非阻塞io模型 , 优势是 处理效率很高,吞吐量巨大,能很快处理大文件,不仅可以 做 文件io操作, 还可以做sock ...
- Java如何使套接字向单个客户端显示消息?
在Java编程中,如何使用套接字向单个客户端显示消息? 以下示例演示了如何使用Socket类的ssock.accept()方法向单个套接字客户端上显示消息. package com.yiibai; i ...
- 原生java调用webservice的方法,不用生成客户端代码
原生java调用webservice的方法,不用生成客户端代码 2015年10月29日 16:46:59 阅读数:1455 <span style="font-family: Aria ...
- ZeroMQ:云时代极速消息通信库
ZeroMQ:云时代极速消息通信库(大规模|可扩展|低成本|高效率解决之道,大规模分布式|多线程应用程序|消息传递架构构建利器) [美]Pieter Hintjens(皮特.亨特金斯)著 卢涛 李 ...
随机推荐
- 简化RESTful开发,Spring Data REST让你少掉发
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 前言 Springboot + Spring MVC大大简化了Web应用的RESTful开发,而Spring Data RE ...
- 9个常用ES6特性归纳(一般用这些就够了)
ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了.它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应 ...
- 精灵小巧的 Jsonpath 万精油:Snack3
前几天和一个群里的朋友交流一个需求:在 Json 里像 XPath 一样找出节点,并修改值,然后输出新的Json. 很多人马上就会说,Jsonpath 啊. 是的 Jsonpath 确实能快速找出节点 ...
- 【算法•日更•第十期】树型动态规划&区间动态规划:加分二叉树题解
废话不多说,直接上题: 1580:加分二叉树 时间限制: 1000 ms 内存限制: 524288 KB提交数: 121 通过数: 91 [题目描述] 原题来自:NOIP 20 ...
- 用终端命令行(BASH)将本地项目上传到Github并提交代码
第一步: 在Github上创建自己的repository 第二步:建立本地仓库cd到你的本地项目根目录下,执行git命令 1:$ cd 到你的项目目录下 2:$ git init 第三步:将本地项目工 ...
- J20航模遥控器开源项目系列教程(三)开发说明 | 想要自己改造程序,扩充功能,怎么实现?
我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/C ...
- sqlalchemy怎么order_by降序/升序并取第一条数据
原文链接:https://blog.csdn.net/mark4541437/article/details/103755721 sqlalchemy怎么order_by降序/升序并取第一条数据 fr ...
- Centos7 Minimal 版安装后安装图形界面教程
1.执行下面命令安装GNOME Desktop Environment yum -y groups install "GNOME Desktop" 2.安装完成后,执行下面的命令, ...
- install-newton部署安装--------控制节点
#################################################################################################### ...
- Better Key Sizes (and Attacks) for LWE-Based Encryption
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! 以下是对本文关键部分的摘抄翻译,详情请参见原文 Abstract 基于“learning with errors”(LWE)问题,分析了理 ...