「java消息确认」Java消息通知

博主:adminadmin 2022-11-29 00:22:08 42

本篇文章给大家谈谈java消息确认,以及Java消息通知对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java socket编程,客户端发送文件给服务器,服务器接收到文件后如何返回确认信息告诉客户端文件已接收

import java.io.BufferedReader;  

import java.io.File;  

import java.io.FileNotFoundException;  

import java.io.FileOutputStream;  

import java.io.IOException;  

import java.io.InputStream;  

import java.io.InputStreamReader;  

import java.net.ServerSocket;  

import java.net.Socket;  

  

  

/** 

 *  

 * 文件名:ServerReceive.java 

 * 实现功能:作为服务器接收客户端发送的文件 

 *  

 * 具体实现过程: 

 * 1、建立SocketServer,等待客户端的连接 

 * 2、当有客户端连接的时候,按照双方的约定,这时要读取一行数据 

 *      其中保存客户端要发送的文件名和文件大小信息 

 * 3、根据文件名在本地创建文件,并建立好流通信 

 * 4、循环接收数据包,将数据包写入文件 

 * 5、当接收数据的长度等于提前文件发过来的文件长度,即表示文件接收完毕,关闭文件 

 * 6、文件接收工作结束 

 *  

 *  

 * 【注:此代码仅为演示客户端与服务器传送文件使用, 

 *      每一个数据包之前没有文件协议命令 

 *      具体的协议传输和文件传出的使用阶段可根据自己程序自行放置】 

 *  

 *  

 * 作者:小菜鸟 

 * 创建时间:2014-08-19 

 *  

 * */  

  

  

  

  

public class ServerReceive {  

  

    public static void main(String[] args) {  

          

        /**与服务器建立连接的通信句柄*/  

        ServerSocket ss = null;  

        Socket s = null;  

          

        /**定义用于在接收后在本地创建的文件对象和文件输出流对象*/  

        File file = null;  

        FileOutputStream fos = null;  

          

        /**定义输入流,使用socket的inputStream对数据包进行输入*/  

        InputStream is = null;  

          

        /**定义byte数组来作为数据包的存储数据包*/  

        byte[] buffer = new byte[4096 * 5];  

          

        /**用来接收文件发送请求的字符串*/  

        String comm = null;  

          

          

        /**建立socekt通信,等待服务器进行连接*/  

        try {  

            ss = new ServerSocket(4004);  

            s = ss.accept();  

        } catch (IOException e) {  

            e.printStackTrace();  

        }  

          

          

        /**读取一行客户端发送过来的约定信息*/  

        try {  

            InputStreamReader isr = new InputStreamReader(s.getInputStream());  

            BufferedReader br = new BufferedReader(isr);  

            comm = br.readLine();  

        } catch (IOException e) {  

            System.out.println("服务器与客户端断开连接");  

        }  

          

        /**开始解析客户端发送过来的请求命令*/  

        int index = comm.indexOf("/#");  

          

        /**判断协议是否为发送文件的协议*/  

        String xieyi = comm.substring(0, index);  

        if(!xieyi.equals("111")){  

            System.out.println("服务器收到的协议码不正确");  

            return;  

        }  

          

        /**解析出文件的名字和大小*/  

        comm = comm.substring(index + 2);  

        index = comm.indexOf("/#");  

        String filename = comm.substring(0, index).trim();  

        String filesize = comm.substring(index + 2).trim();  

          

          

        /**创建空文件,用来进行接收文件*/  

        file = new File(filename);  

        if(!file.exists()){  

            try {  

                file.createNewFile();  

            } catch (IOException e) {  

                System.out.println("服务器端创建文件失败");  

            }  

        }else{  

            /**在此也可以询问是否覆盖*/  

            System.out.println("本路径已存在相同文件,进行覆盖");  

        }  

          

        /**【以上就是客户端代码中写到的服务器的准备部分】*/  

          

          

        /** 

         * 服务器接收文件的关键代码*/  

        try {  

            /**将文件包装到文件输出流对象中*/  

            fos = new FileOutputStream(file);  

            long file_size = Long.parseLong(filesize);  

            is = s.getInputStream();  

            /**size为每次接收数据包的长度*/  

            int size = 0;  

            /**count用来记录已接收到文件的长度*/  

            long count = 0;  

              

            /**使用while循环接收数据包*/  

            while(count  file_size){  

                /**从输入流中读取一个数据包*/  

                size = is.read(buffer);  

                  

                /**将刚刚读取的数据包写到本地文件中去*/  

                fos.write(buffer, 0, size);  

                fos.flush();  

                  

                /**将已接收到文件的长度+size*/  

                count += size;  

                System.out.println("服务器端接收到数据包,大小为" + size);  

            }  

              

        } catch (FileNotFoundException e) {  

            System.out.println("服务器写文件失败");  

        } catch (IOException e) {  

            System.out.println("服务器:客户端断开连接");  

        }finally{  

            /** 

             * 将打开的文件关闭 

             * 如有需要,也可以在此关闭socket连接 

             * */  

            try {  

                if(fos != null)  

                    fos.close();  

            } catch (IOException e) {  

                e.printStackTrace();  

            }//catch (IOException e)  

        }//finally  

  

    }//public static void main(String[] args)  

}//public class ServerReceive

我想通过java写一个检测rabbitmq的queue堵塞的消息该怎么做

下面是RabbitMQ的消息确认机制:“为了确保消息不会丢失,RabbitMQ支持消息确认机制。客户端在接受到消息并处理完后,可以发送一个ack消息给RabbitMQ,告诉它该消息可以安全的删除了。

JAVA中的JMS是什么意思?它起了什么作用

. JMS基本概念

JMS(Java Message Service)是访问企业消息系统的标准API,它便于消息系

统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发。

2. JMS基本功能

JMS是用于和面向消息的中间件相互通信的应用程序接口。它既支持点对点(point-to-point)的域,又支持发布/订阅(publish/subscribe)类型的域,并且提供对下列类型的支持:经认可的消息传递,事务型消息的传递,一致性消息和具有持久性的订阅者支持。JMS还提供了另一种方式来对您的应用与旧的后台系统相集成。

3. WebLogic JMS Server介绍

WebLogic Server8.1符合JAVA规范,并通过Sun Microsystems J2EE 1.3认

证.作为WebLogic的一部分,当然WebLogic JMS Server也完全遵从JMS规范,还支持集群,并可以应用于实际企业系统.下图是WebLogic JMS Server体系结构.图中可以看到WebLogic JMS Server主要组件有: WebLogic JMS servers(用于消息通信),Java客户端,JNDI(用于域名查找), 后备存储(用于持久消息存储,基于文件或者JDBC数据库).

二. WebLogic JMS特性

1. 消息通信模型

JMS 支持两种消息通信模型:点到点(point-to-point)(PTP)模型和发布/订阅(Pub/Sub)模型。除了下列不同之外,这两种消息通信模型非常地相似:

PTP 模型规定了一个消息只能有一个接收者;Pub/Sub 模型允许一个消息可以有多个接收者。

2. 消息组成

消息传递系统的中心就是消息。

一条 Message 分为三个组成部分:

· 头(header)是个标准字段集,客户机和供应商都用它来标识和路由消息。

· 属性(property)支持把可选头字段添加到消息。如果您的应用程序需要不使用标准头字段对消息编目和分类,您就可以添加一个属性到消息以实现这个编目和分类。提供 setTypeProperty(...) 和 getTypeProperty(...) 方法以设置和获取各种 Java 类型的属性,包括 Object。JMS 定义了一个供应商选择提供的标准属性集。

· 消息的主体(body)包含要发送给接收应用程序的内容。每个消息接口特定于它所支持的内容类型。

JMS 为不同类型的内容提供了它们各自的消息类型,但是所有消息都派生自 Message 接口。

· StreamMessage:包含 Java 基本数值流,用标准流操作来顺序的填充和读取。

· MapMessage:包含一组名/值对;名称为 string 类型,而值为 Java 的基本类型。

· TextMessage:包含一个 String。

· ObjectMessage:包含一个 Serializable Java 对象;能使用 JDK 的集合类。

· BytesMessage:包含未解释字节流: 编码主体以匹配现存的消息格式。

· XMLMessage: 包含XML内容。扩展TextMessage,XMLMessage 类型的使用,使得消息过滤非常便利。

3. 消息确认模式

非事务性会话中,应用程序创建的会话有5 种确认模式,而在事务性会话中,确认模式被忽略。

五种确认模式说明:

· AUTO_ACKNOWLEDGE:自动确认模式。一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收。

· CLIENT_ACKNOWLEDGE:客户端确认模式。会话对象依赖于应用程序对被接收的消息调用一个acknowledge()方法。一旦这个方法被调用,会话会确认最后一次确认之后所有接收到的消息。这种模式允许应用程序以一个调用来接收,处理并确认一批消息。注意:在管理控制台中,如果连接工厂的Acknowledge Policy(确认方针)属性被设置为"Previous"(提前),但是你希望为一个给定的会话确认所有接收到的消息,那么就用最后一条消息来调用acknowledge()方法。

· DUPS_OK_ACKNOWLEDGE:允许副本的确认模式。一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收;而且允许重复确认。在需要考虑资源使用时,这种模式非常有效。注意:如果你的应用程序无法处理重复的消息的话,你应该避免使用这种模式。如果发送消息的初始化尝试失败,那么重复的消息可以被重新发送。

· NO_ACKNOWLEDGE:不确认模式。不确认收到的消息是需要的。消息发送给一个NO_ACKNOWLEDGE 会话后,它们会被WebLogic 服务器立即删除。在这种模式下,将无法重新获得已接收的消息,而且可能导致下面的结果:1. 消息可能丢失;和(或者)另一种情况:2. 如果发送消息的初始化尝试失败,会出现重复消息被发送的情况。

· MULTICAST_NO_ACKNOWLEDGE:IP组播下的不确认模式,同样无需确认。发送给一个MULTICAST_NO_ACKNOWLEDGE会话的消息, 会共享之前所述的NO_ACKNOWLEDGE 确认模式一样的特征。这种模式支持希望通过IP 组播方式进行消息通信的应用程序,而且无需依赖会话确认提供的服务质量。注意:如果你的应用程序无法处理消息的丢失或者重复,那么你应该避免使用这种模式。如果发送消息的初始化尝试失败的话,重复的消息可能会被再次发送。

注:在上表的5 种确认模式中,AUTO_ACKNOWLEDGE ,DUPS_OK_ACKNOWLEDGE 和

CLIENT_ACKNOWLEDGE 是JMS 规范定义的,NO_ACKNOWLEDGE 和MULTICAST_NO_ACKNOWLEDGE是WebLogic JMS 提供的。

java socket 服务器收到客户端传来的文件如何返回确认,客户端又如何接收确认信息并弹出成功对话框?

输出流调用完相关的write()方法,需要调用flush()刷新,否则流不会从缓存中发出去,另外客户端注意切换流向的时候一定要把前一个流向关闭,调用

socket.shutdownOutput(); // 关闭输出流

socket.shutdownInput(); //关闭输入流

java中消息的订阅指的是什么

Connection 对象表示了到两种消息模型中的任一种的消息系统的连接。服务器端和客户机端对象要求管理创建的JMS连接的状态。连接是由Connection Factory创建的并且通过JNDI查寻定位。//取得用于 P2P的 QueueConnectionFactory QueueConnectionFactory = queueConnectionFactory( ); Context messaging = new InitialContext( ); QueueConnectionFactory = (QueueConnectionFactory) Messaging.lookup(“QueueConnectionFactory”); //取得用于 pub/sub的 TopicConnectionFactory TopicConnectonFactory topicConnectionFactory; Context messaging = new InitialContext(); topicConnectionFactory = (TopicConnectionFactory) messaging.lookup(“TopicConnectionFactory”);

注意:用于P2P的代码和用于PublishSubscribe的代码非常相似。

如果 session 被标记为 transactiona l的话,确认消息就通过确认和校正来自动地处理。如果 session 没有标记为 transactional,你有三个用于消息确认的选项:

· AUTO_ACKNOWLEDGE:session 将自动地确认收到一则消息;

· CLIENT_ACKNOWLEDGE:客户端程序将确认收到一则消息,调用这则消息的确认方法;

· DUPS_OK_ACKNOWLEDGE:这个选项命令 session “懒散地”确认消息传递,可以想到,这将导致消息提供者传递的一些复制消息可能会出错。这种确认的方式只应当用于消息消费程序可以容忍潜在的副本消息存在的情况。 queueSession = queueConnection.createQueueSession(false, session.AUTO_ACKNOWLEDGE);//P2P topicSession = topicConnection.createTopicSession(false, session.AUTO_ACKNOWLEDGE); //Pub-Sub

注意:在本例中,一个session目的从连结中创建,非值指出session是non-transactional的,并且 session将自动地确认收到一则消息。

java 发送snmp trap消息如何确定发送成功

snmptrapd需要一个配置文档,snmptrapd.conf。

此文件用来指定管理进程如何处理接收到的snmp notification。

1. 在net-snmp安装目录下新建snmptrapd.conf文件,假设本系统使用以下路径:/ABC/soft/net-snmp/share/snmp/snmptrapd.conf

2. 在snmptrapd.conf中加入以下指令:

authCommunity log,execute,net public

这条指令指明以“public”为“community”请求的snmp “notification”允许的操作。

各变量意义如下:

log: log the details of the notification - either in a specified file, to standard output (or stderr), or via syslog(or similar).

execute: pass the details of the trap to a specified handler program, including embedded perl.

net: forward the trap to another notification receiver.

3. 若想对接收到的信息进行处理,可以使用traphandle,示例如下:

traphandle SNMPv2-MIB::coldStart /usr/nba/bin/traps cold

traphandle SNMPv2-MIB::warmStart /usr/nba/bin/traps warm

traphandle IF-MIB::linkDown /usr/nba/bin/traps down

traphandle IF-MIB::linkUp /usr/nba/bin/traps up

第一个参数为从snmptrapd接收的OID,第二个参数为调用的程序。此系统未做traphandle处理。

4. 启动snmptrapd

使用以下指令启动snmptrapd:

snmptrapd -f -Lo

该指令将接收到的信息通过标准输出设备打印出来,各参数意义如下:

-f: Do not fork() from the calling shell.

-L[efos]: Specify where logging output should be directed (standard error or output, to a file or via syslog

关于java消息确认和Java消息通知的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-29,除非注明,否则均为首码项目网原创文章,转载请注明出处。