c# - 分布式环境中的中间件应用

标签 c# java .net spring-mvc middleware

我想开发一个应用程序,它将数据从一个应用程序传输到另一个应用程序。现在的亮点是我的一个应用程序是在 .Net 框架中,而另一个应用程序是在 Spring 框架(Java)中实现的。

哪种编程技术最适合这种环境?
是的!数据会非常重,其中包括 BLOB。而且转账的时候有可能断网,所以必须是交易之类的东西;因为我当然不想丢失数据。

您对 http 上的 XML 有何看法?

请建议我应该实现哪种类型的应用程序来传输数据。

最佳答案

使用 Java,JMS 提供了一种将应用程序与提供数据的传输层分离的方法。通过使用所需提供程序的 JNDI 信息,可以使用相同的 Java 类与不同的 JMS 提供程序进行通信。这些类首先使用连接工厂连接到队列或主题,然后使用填充并发送或发布消息。在接收端,客户端接收或订阅消息。

我用过SonicMQ messaging system还有Java Message Services非常稳定...您可以查看有关我如何使用它的一些示例 here并且有一个 .Net implementation

编码可能非常简单:

/**
 * 
 * This file is part of Jms.publisher sample.
 * 
 *  Jms.publisher is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 * 
 *  Jms.publisher is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 * 
 *  You should have received a copy of the GNU General Public License
 *  along with Jms.publisher.  If not, see <http://www.gnu.org/licenses/>.
 *  
 * 
 * AccessManager.Java 
 * Create by Iván Jaimes on 03/09/2012
 * 
 */
package sonic;

import javax.jms.JMSException;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.TopicConnection;
import javax.jms.TopicPublisher;
import javax.jms.TopicSession;
import javax.jms.TopicConnectionFactory;

import config.ConnectionInfo;

public class AccessManager 
{
    private TopicConnection connection = null;
    private TopicSession session = null;
    private TopicPublisher topicPublisher = null;    
    private TopicConnectionFactory connectionFactory = null;
    private ConnectionInfo info = null;

    public AccessManager(ConnectionInfo connectionInfo) throws JMSException
    {
        info = connectionInfo;
    }

    public final void connect() throws JMSException
    {
        connectionFactory = new progress.message.jclient.TopicConnectionFactory(info.getSonicAddress());
        connection = connectionFactory.createTopicConnection(info.getUserName(), info.getPassword());
        connection.start();
        session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
        topicPublisher = session.createPublisher(info.getTopic());
        assert (isConnected());
    }

    public void send(String text) throws JMSException  
    {
        TextMessage message = session.createTextMessage(text); // send method
        topicPublisher.publish(message);
    }
    /**
     * Disconnect.
     * @throws JMSException 
     */
    public final void disconnect() throws JMSException 
    {
        if (topicPublisher != null) 
        {
            topicPublisher.close();
            session.close();
            connection.close();
        }

        connection = null;
        session = null;
    }

    /**
     * Checks if is connected.
     * 
     * @return true, if is connected
     */
    public final boolean isConnected() {
        if (session != null) {
            return true;
        }
        return false;
    }
}

还有更多关于它的资源:

关于c# - 分布式环境中的中间件应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12980689/

相关文章:

c# - 了解通过 SSL 进行调用的代码

c# - 如何将字符串拆分为包含前一个最后一个字符的两个字符的字符串数组?

java - 你能在另一个类的方法中调用变量吗?

java - 在 ASCII、二进制、八进制和十六进制之间转换

c# - NSMutableArray 和 NSArray 在 C# 中的等效项是什么?

.net - 使用依赖注入(inject)框架还是自己编写?

c# - 使用时间跨度显示总持续时间

c# - 我的 C# For 循环和 If 语句有什么问题?

c# - 找不到类型或命名空间名称 'DbContext'(已安装 EF)

java - if 语句中的数学问题