使用哪种协议发送 JMS 消息?

Which protocol to use for sending JMS messages?

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

我有一台服务器,连接了 1000 个客户端。服务器将 task 传递给客户端。客户端在执行不同的任务后返回信息。

我应该如何使用一些参数将任务发送到 JMS 客户端?

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

一份报告只不过是数据。

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

这是我们当前的实现。

我们用 XSD 定义了一个协议,并让它生成 classes (POJO's)。 这允许我们 marshal/unmarshal 对象并将它们作为 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>

我们的测试class:

public class JaxbFacadeTest {

    @Test
    public void testPing() throws JAXBException, SAXException, UnsupportedEncodingException {
        System.out.println("testPing");
        Ping ping = new Ping();
        ping.setClient("guid-client");
        ping.setMessage("Ping Message");
        String marshalToString = JaxbFacade.getInstance().marshalToString(ping);
        System.out.println(marshalToString);
    }

    @Test
    public void testPong() throws JAXBException, SAXException, UnsupportedEncodingException {
        System.out.println("testPong");
        Pong pong = new Pong();
        pong.setClient("guid-client");
        pong.setMessage("Ping Message");
        String marshalToString = JaxbFacade.getInstance().marshalToString(pong);
        System.out.println(marshalToString);
    }

    @Test
    public void testAlive() throws JAXBException, SAXException, UnsupportedEncodingException {
        System.out.println("testAlive");
        Date now = new Date();
        Alive alive = new Alive();
        alive.setClient("guid-client");
        alive.setTime(now.toString());
        String marshalToString = JaxbFacade.getInstance().marshalToString(alive);
        System.out.println(marshalToString);
    }

    //Many more
}

classes是用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>