首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >希望在java中实现简单的面向消息的中间件

希望在java中实现简单的面向消息的中间件
EN

Stack Overflow用户
提问于 2012-03-11 16:45:24
回答 2查看 1K关注 0票数 1

我的研究工作集中在传感器和执行器增广系统的领域专用语言(DSL)上。

我想要快速测试我的DSL (在Java中),它使用面向消息的中间件(其任务是只启用DSL的软件组件之间的通信)。

通信意味着简单的发布/订阅、事件通知、过程调用。

您能建议我一种在Java中快速实现简单中间件的方法吗?我只想在我的单机上测试我的DSL。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-17 12:16:00

我感谢StackOverflow社区通过回答我的问题来帮助我。Stackoverflow真的很棒!2个月前,我已经问过上面的问题了。现在,我已经想出了“简单的面向消息的单PC中间件”。我想为这个社区贡献简单的面向消息的中间件。如果你在理解上有困难请告诉我。

代码语言:javascript
复制
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;

public class PubSubMiddleware {

    private Map<String, Set<Subscriber>> subscriberMap = new Hashtable<String, Set<Subscriber>>();
    private Map<String, Set<CommandListener>> registeredInstanceMap = new Hashtable<String, Set<CommandListener>>();


    static PubSubMiddleware singletonInstance;

    public static PubSubMiddleware getInstance() {
        if (singletonInstance == null) {
            singletonInstance = new PubSubMiddleware();
        }
        return singletonInstance;
    }

    public void subscribe(Subscriber s, String eventSignature) {

        registerNewSubscriber(s, eventSignature);
    }

    public void publish(String eventName, Object arg) {

        Set<Subscriber> subscriberEventSet = getSubscribersForEvent(eventName);

        if (subscriberSet != null) {
            for (Subscriber s : subscriberSet) {
                s.notifyReceived(eventName, arg);
            }
        }

    }
    private void registerNewSubscriber(Subscriber s, String eSig) {

    if (subscriberMap.containsKey(eSig)) {

            Set<Subscriber> tempSet = subscriberMap.get(eSig);

            tempSet.add(s);
        } else {
            Set<Subscriber> newSet = new HashSet<Subscriber>();
            newSet.add(s);
            subscriberMap.put(eSig, newSet);
        }
    }

    private Set<Subscriber> getSubscribersForEvent(String eventSignature) {
        return subscriberMap.get(eventSignature);
    }

    // Request-Response

    public Object sendCommand(String methodName, Object arg) {

        Set<CommandListener> registeredInstanceSet = getInstanceForCommand(methodName);

        if (registeredInstanceSet != null) {
            for (CommandListener s : registeredInstanceSet) {
                return s.commandReceived(methodName, arg);
            }
        }
        return null;
    }

    private Set<CommandListener> getInstanceForCommand(String methodName) {
        return registeredInstanceMap.get(methodName);
    }

    private void registerNewInstance(CommandListener s, String listnerSignature) {


        if (registeredInstanceMap.containsKey(listnerSignature)) {
            Set<CommandListener> tempSet = registeredInstanceMap
                    .get(listnerSignature);
            tempSet.add(s);
        } else {
            Set<CommandListener> newSet = new HashSet<CommandListener>();
            newSet.add(s);
            registeredInstanceMap.put(listnerSignature, newSet);
        }
    }

    public void registerInstance(CommandListener s, String listnerSignature) {
        registerNewInstance(s, listnerSignature);
    }

}
票数 2
EN

Stack Overflow用户

发布于 2012-03-11 16:50:22

尝试任何存在于Java中的开源妈妈,比如mom4j开放消息队列ActiveMQ (等等)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9656841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档