要使用哪个协议发送JMS消息?

要使用哪个协议发送JMS消息?,jms,protocols,message,Jms,Protocols,Message,我需要一些建议来实现发送消息的最佳协议(不是http、tcp等) 我应该发送序列化对象吗?(波乔的) 我应该发送与技术无关的XML消息吗 有什么建议? 两者都会起作用,但最佳实践是什么。我不喜欢共享库,但使用XML容易吗?有更好的选择吗?提前谢谢 我有一台服务器,连接了1000个客户端。服务器将任务传递给客户端。客户端在执行不同的任务后返回信息 我应该如何使用一些参数向JMS客户机发送任务 任务只不过是一个动作和一些参数 示例:“操作=测量;参数:持续时间=100秒;样本数=100”-->

我需要一些建议来实现发送消息的最佳协议(不是http、tcp等)

  • 我应该发送序列化对象吗?(波乔的)
  • 我应该发送与技术无关的XML消息吗
  • 有什么建议? 两者都会起作用,但最佳实践是什么。我不喜欢共享库,但使用XML容易吗?有更好的选择吗?提前谢谢
我有一台服务器,连接了1000个客户端。服务器将任务传递给客户端。客户端在执行不同的任务后返回信息

我应该如何使用一些参数向JMS客户机发送任务

任务只不过是一个动作和一些参数

  • 示例:“操作=测量;参数:持续时间=100秒;样本数=100”-->在100秒内采集100个样本
  • 示例:“action=config;parameters:配置参数集”-->更改客户端配置
  • 示例:“action=stop”-->停止客户端(每天重新启动后系统将重新启动)
报告只不过是数据

  • 示例:“100个测量值列表”
  • 示例:“日志文件的内容”

我读了很多文章,但找不到这个问题的答案。提前感谢。

这是我们当前的实施

我们用XSD定义了一个协议,并让它生成类(POJO)。 这使我们能够封送/解封这些对象,并将它们作为XML对象发送

我们的XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
           jaxb:version="2.0">

    <!-- Ping
        The server will send a ping to a client and waits for a pong.
    ****************************************************************** -->
    <xs:element name="Ping">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="client" type="xs:string"/>
                <xs:element name="message" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <!-- Pong
        The client will send a pong back to the server.
    ****************************************************************** -->
    <xs:element name="Pong">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="client" type="xs:string"/>
                <xs:element name="message" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <!-- Alive
        The client will send an alive message when it starts up.
        The time is local client time.
    ****************************************************************** -->
    <xs:element name="Alive">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="client" type="xs:string"/>
                <xs:element name="time" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <!-- ... Many more message definitions ...
    ****************************************************************** -->

</xs:schema>
这些类是使用maven生成的:

<build>
    <resources>
        <resource>
            <directory>${project.basedir}/src/main/xsd</directory>
            <targetPath>com/test/package/client/jaxb</targetPath>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <executions>
                <execution>
                    <id>jaxb</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <generatePackage>com.test.package.client.jaxb</generatePackage>
                <schemaDirectory>${project.basedir}/src/main/xsd</schemaDirectory>
            </configuration>
        </plugin>
    </plugins>
</build>

${project.basedir}/src/main/xsd
com/test/package/client/jaxb
org.jvnet.jaxb2.maven2
maven-jaxb2-plugin
jaxb
生成
com.test.package.client.jaxb
${project.basedir}/src/main/xsd

至于“任务”-您给出的示例有什么问题?听起来非常合适。至于“报告”,我看到的唯一问题是分隔符:如何将“列表”与以下文本分开,如何将值彼此分开。但这应该很容易解决。发送POJO的序列化文件是一种好的做法吗?或者我应该坚持使用与技术无关的XML。两者都会起作用,但最佳实践是什么。我不喜欢共享库,但使用XML容易吗?有更好的选择吗?提前谢谢!由于兼容性问题,我会避免序列化POJO。您需要共享jar,并确保serialVersionUID正确递增。否则,您将面临严重的版本控制问题。对于像你描述的那样简单的东西,为什么不考虑像JSON之类的东西,并将其反序列化为一个简单的地图?
<build>
    <resources>
        <resource>
            <directory>${project.basedir}/src/main/xsd</directory>
            <targetPath>com/test/package/client/jaxb</targetPath>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <executions>
                <execution>
                    <id>jaxb</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <generatePackage>com.test.package.client.jaxb</generatePackage>
                <schemaDirectory>${project.basedir}/src/main/xsd</schemaDirectory>
            </configuration>
        </plugin>
    </plugins>
</build>