当前位置: 首页 > news >正文

Java+nanomsg快速实现去broker的数据通信

先说一下nanomsg+Java需要做什么:
1、nanomsg的so文件的制作与放置路径
2、Java代码引入nanomsg的依赖
3、支持Socket参数的调节(包括ipv4/ipv6的网络支持)

在我目前的认知范围内要与一个通讯目标实现数据交互通常有这些方式
1、broker中间人转发,
例如:kafka,mqtt 等等mq

2、直接连接进行数据交互
例如:tcp,udp
衍生开来就包含了很多http,netty自定义开发,grpc,等等当然也包含了今天的主角nanomsg;

nanomsg官网:https://niwi.nz/jnanomsg/latest/#_introduction
nanomsg用来做什么看看官网对它的介绍,模式挺多的;

我来简单讲一下怎么应用起来并且让程序跑起来:

一、so文件的制作与放置路径

git clone https://github.com/nanomsg/nanomsg.git
cd nanomsg
mkdir build
cd build
cmake ..
make

此时,需要将支持我们系统架构的库文件挪移到对应的文件夹下,以方便底层逻辑的读取!

此时build文件下的:libnanomsg.so(x86下的)就是我们需要的库文件了
注意:在什么样的操作系统下制作出来的就是支持什么系统的文件,比如mac电脑的文件就是:libnanomsg.dylib

对应系统的java+nanomsg的库文件的读取路径大概是:
macOS:/Library/Java/Extensions 或 /Users/你的用户名/Library/Java/Extensions
Linux:/usr/lib 或 /usr/local/lib
Windows:C:\Windows\System32

但是在我测试过程中发现,java对于库文件的读取会有些许变动:
mac真实读取位置:/Library/Java/Extensions/darwin/libnanomsg.dylib
linux(x86)真实读取位置:/usr/lib/libnanomsg.so
其它的需要自己测测了

错误引流:
Caused by: java.lang.UnsatisfiedLinkError: Unable to load library ‘nanomsg’: Native library (darwin/libnanomsg.dylib) not found in resource path

二、Java代码引入nanomsg的依赖

maven:(两个应该都可以的,我用的第一个)

        <dependency><groupId>cs</groupId><artifactId>jnanomsg</artifactId><version>0.4.5</version></dependency>
<!--        <dependency>-->
<!--            <groupId>jnanomsg</groupId>-->
<!--            <artifactId>jnanomsg</artifactId>-->
<!--            <version>0.4.3</version>-->
<!--        </dependency>-->

代码演示:

提一下address的地址支持:
ipv4支持address:
tcp://0.0.0.0:5551
tcp://*:5592
tcp://[::]:5559

ipv6支持address:
tcp://*:5592
tcp://[::]:5559
tcp://[v6某一个网络端口的地址]:5593

推送数据:
我演示的是pub/sub模式,也可以理解为去broker的mq
一个server可以有一群client进行连接订阅server的数据
topic底层应该默认使用的是 空格进行组织的数据
即:
topic1 data
topic2 data
topic3 data

    private static String address = "tcp://[::]:5557";private Socket socket;public void afterPropertiesSet() throws Exception {try {socket = new PubSocket();socket.setSocketOpt(Nanomsg.SocketOption.NN_IPV4ONLY,0);//支持ipv6&v4socket.bind(address);log.info("NanoMsgRsuMsgServer socket start success.ad:{}", address);} catch (IOException e) {log.error("创建失败:",e);}}public void publish(String topic, String data) {if (socket == null) {log.warn("nanomsg socket 尚未初始化");}socket.send(topic + " " + data);}

订阅数据:

    public static void main(String[] args) throws InterruptedException {Socket socket = new SubSocket();// 连到远端地址socket.connect("tcp://127.0.0.1:5557");socket.subscribe("topic1");//订阅某一类型的数据socket.subscribe("topic2");
        socket.subscribe(" ");//订阅所有while (true) {System.out.println(socket.recvString());}}

测试可用性:
telnet v6/v4地址 端口(可以被用来查看该端口是否可以被使用/服务是否启动)
lsof v6/v4地址:端口(可以来看端口启动的基本信息)

三、支持Socket参数的调节(包括ipv4/ipv6的网络支持)

没有设置这个的话,会爆错误:

socket.setSocketOpt(Nanomsg.SocketOption.NN_IPV4ONLY,0);//支持ipv6&v4
Nanomsg.SocketOption静态枚举内支持很多参数调节:
NN_SUB_UNSUBSCRIBE,
NN_SUB_SUBSCRIBE,
NN_SNDFD,
NN_RCVFD,
NN_LINGER,
NN_SNDBUF,
NN_RCVBUF,
NN_RCVMAXSIZE,
NN_SNDTIMEO,
NN_RCVTIMEO,
NN_RECONNECT_IVL,
NN_RECONNECT_IVL_MAX,
NN_SNDPRIO,
NN_RCVPRIO,
NN_IPV4ONLY,
NN_SOCKET_NAME;
可以自己搜索用法

错误引流:
Caused by: nanomsg.exceptions.IOException: No such device

http://www.xdnf.cn/news/62317.html

相关文章:

  • 2025年最新服务器、中间件安全(面试题)
  • HADOOP 3.4.1安装和搭建(尚硅谷版~)
  • 强化学习系统学习路径与实践方法
  • 随机面试--<二>
  • 1+X: Python程序开发职业技能等级要求(初级)练习资料分享
  • 哈希表的学习
  • 基于RK3588+FPGA+AI YOLO的无人船目标检测系统(一)概述
  • 几何编码:启用矢量模式地理空间机器学习
  • OOA-CNN-LSTM-Attention、CNN-LSTM-Attention、OOA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比
  • 【Redis】SpringDataRedis
  • 【自然语言处理与大模型】模型压缩技术之量化
  • 在线查看【免费】avi,mov,rm,webm,ts,rm,mkv,mpeg,ogg,mpg,rmvb,wmv,3gp,ts,swf文件格式网站
  • Spring Boot 集成 Redis 实战总结
  • Idea中实用设置和插件
  • 系统架构师2025年论文《论基于UML的需求分析》
  • 项目实战 -- 发布管理
  • 把dll模块注入到游戏进程的方法_基于文件修改的注入方式
  • SQL语言的三大分类及其应用详解
  • 欧拉-国产操作系统替代产品如何
  • FreeRTOS中的优先级翻转问题及其解决方案:互斥信号量详解
  • ESP-ADF外设子系统深度解析:esp_peripherals组件架构与核心设计(显示输出类外设之IS31FL3216)
  • DeepSeek+Cursor+Devbox+Sealos项目实战
  • IP精准检测“ipinfo”
  • Flask API 项目 Swagger 版本打架不兼容
  • ADC数据不稳定的解决方案
  • Java学习手册:HTTP 协议基础知识
  • 【Maven基础】
  • 霍尔效应的应用领域
  • QT 5.15 程序打包
  • 【无人机】无人机方向的设置,PX4飞控方向,QGC中设置飞控的方向/旋转角度。PX4使用手册飞行控制器/传感器方向