我正在为我们的产品开发消息/通知系统.基本要求是:
这些库将用C#编写.Spring.NET刚刚发布了一个具有大量优秀消息抽象的里程碑版本,这很棒 - 我计划广泛使用它.我的基本问题归结为消息经纪人的问题.我的架构看起来像应用程序 - >消息代理队列 - >侦听的服务器应用程序,将所有消息分派到他们需要去的地方,并处理那些长期消息的生命周期 - >消息代理队列或主题 - >监听应用.
最后,问题是:我应该使用哪个消息代理?我偏向于ActiveMQ - 我们在上一个项目中使用它并喜欢它.我不能想到对它的单一攻击,除了它是Java,并且需要在某个地方的服务器上安装java,这对于将使用这项服务的一些人来说可能很难卖.我一直在关注的另一个选择是MSMQ.我出于某种未知原因对它有偏见,而且它似乎也没有很好的多播支持.
有没有人用MSMQ这样的东西?任何利弊,可能会以某种方式影响投票的东西?
最后一点,我们使用的是.NET 2.0.
好的..所以我开始研究MQ及其目的/用例等...我现有的应用程序(使用JSP等制作的Web)使用RestFUL接口与远程服务器通信并从服务器发布/接收数据.
我们经常要处理远程服务器的连接问题.同步问题总是在那里.
从我们的结束发送的消息.但是远程服务器发生故障.或相反亦然.
我遇到了MQ的事情,并发现在从远程服务器发送和接收消息时它是可靠的.
但同样,使用REST我认为对MQ的整个需求似乎有点模糊.我基本上在寻找MQ和RestFUL之间的一些差异.
我在其他博客文章中看到,随着RestFUL领域研究的不断增加,MQ的速度将逐渐放松.
我对MQ没有太多了解,所以不会发表任何评论,但肯定与RestFUL合作很有趣.
如果有人提供使用RestFUL和MQ之间的差异,将不胜感激.
我将为项目选择一个JMS消息代理.JMS服务器稳定并且可以处理大量消息是至关重要的.我缩小了列表以包含Active MQ和JBoss Messaging.
我想知道你是否有任何经验,甚至更好,在同一环境中尝试过这两种方法.任何研究论文或类似文件的链接都会很好.
有一种方法可以抑制ActiveMQ服务器上定义的队列上的重复消息吗?
我尝试手动定义JMSMessageID,(message.setJMSMessageID("uniqueid")),但服务器忽略此修改并传递带有内置生成的JMSMessageID的消息.
根据规范,我没有找到关于如何重复删除邮件的参考.
在HornetQ中,为了解决这个问题,我们需要在消息定义上声明HQ特定属性org.hornetq.core.message.impl.HDR_DUPLICATE_DETECTION_ID.
即:
Message jmsMessage = session.createMessage();
String myUniqueID = "This is my unique id"; // Could use a UUID for this
message.setStringProperty(HDR_DUPLICATE_DETECTION_ID.toString(), myUniqueID);
Run Code Online (Sandbox Code Playgroud)
有人知道ActiveMQ是否有类似的解决方案?
我刚刚apt-get在Ubuntu 11.10上安装了ActiveMQ .
每次我尝试启动它,我都可以在控制台中看到:
No instances found at /etc/activemq/instances-enabled.
Run Code Online (Sandbox Code Playgroud)
要启动服务我正在使用如下service命令:
$ sudo service activemq start
Run Code Online (Sandbox Code Playgroud)
它看起来像在Ubuntu上配置Apache2的方法,但我找不到任何关于如何管理实例的文档.也许这里的任何人都可以帮我一臂之力?
有两个程序:订阅者和发布者...订阅者能够将消息放入主题并且消息成功发送.当我在浏览器上检查activemq服务器时,它显示1 msg排队.但是当我运行消费者代码时,它没有收到消息
这是生产者代码:
import javax.jms.*;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class producer {
private static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
Connection connection = connectionFactory.createConnection();
connection.start();
// JMS messages are sent and received using a Session. We will
// create here a non-transactional session object. If you want
// to use transactions you should set the first parameter to 'true'
Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic("testt"); …Run Code Online (Sandbox Code Playgroud) 我已经工作Active MQ了很长时间并且熟悉Active MQ架构.最近我Kafka作为一个消息传递系统听到了很多.它与Active MQ和其他消息传递系统相比有哪些优势?它只是另一个大数据热门词吗?还kafka适用于零丢失消息系统吗?
我们在经纪人网络中设置了4个ActiveMQ代理(每个代理在一个单独的服务器上运行).大约有60个生产者.生产者使用JDNI从Glassfish查找ActiveMQ连接工厂.
Glassfish中配置的ActiveMQ URI如下:
failover:(tcp://phxgapm01:61616,tcp://phxgapm02:61616,tcp://phxgapm03:61616,tcp://phxgapm04:61616)?randomize=true&backup=false&maxReconnectAttempts=8
Run Code Online (Sandbox Code Playgroud)
每个生成器进程执行javax.jms.ConnectionFactory的JNDI查找,然后创建1个javax.jms.Connection.当生成器运行时,它将定期创建一个javax.jms.Session和javax.jms.MessageProducer,将一些消息发送到队列,然后关闭Session和MessageProducer.
这就是所有背景 - 现在我的问题.从一些但不是所有的生产者,我们将看到如下的日志输出流:
2014-12-30 21:07:06,534 INFO FailoverTransport - Successfully connected to tcp://phxgapm03:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,538 INFO FailoverTransport - Successfully connected to tcp://phxgapm04:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,544 INFO FailoverTransport - Successfully connected to tcp://phxgapm02:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,548 INFO FailoverTransport - Successfully connected to tcp://phxgapm04:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,552 INFO FailoverTransport - Successfully connected to tcp://phxgapm01:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,556 INFO FailoverTransport - Successfully connected to tcp://phxgapm02:61616 - [ActiveMQ Task-1] …Run Code Online (Sandbox Code Playgroud) 我有一个组件将消息发送到队列以由另一个系统处理.它还应该每隔一段时间发布一个关于工作状态的主题.我可以使用相同的JmsTemplate用于发送到队列并发布到主题吗?
我在ActiveMQ中创建了一个新主题,不过当我从JmsTemplate发送一条消息时,一个带有主题名称的新队列会被发送的消息创建(而不是将数据发送到实际主题),我在这里做错了什么?
这是我的配置:
<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<constructor-arg ref="amqConnectionFactory" />
<property name="exceptionListener" ref="jmsExceptionListener" />
<property name="sessionCacheSize" value="100" />
</bean>
<!-- JmsTemplate Definition -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<constructor-arg ref="connectionFactory" />
</bean>
<bean id="messageFacade" class="org.foo.MessageFacadeJms">
<property name="jmsTemplate" ref="jmsTemplate" />
</bean>
Run Code Online (Sandbox Code Playgroud)
MessageFacadeJms是我用来发送队列消息的类(它可以工作),我还可以用它来发布一个主题吗?
我可以使用它来同时进行队列发送和主题发布吗?:
jmsTemplate.convertAndSend("TOPIC_NAME" /* or queue name */, message);
Run Code Online (Sandbox Code Playgroud) 我试图activemq在我的应用程序中使用,但在尝试连接到localhost时不断收到错误:
log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" org.springframework.jms.UncategorizedJmsException: Uncategorized exception occured during JMS processing; nested exception is javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused
at org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:316)
at org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:168)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:469)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:534)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:526)
at sender.MessageSender.sendMessage(MessageSender.java:16)
at sender.SenderMain.main(SenderMain.java:13)
Caused by: javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection …Run Code Online (Sandbox Code Playgroud) activemq-classic ×10
java ×6
jms ×5
apache-kafka ×1
duplicates ×1
glassfish ×1
jboss ×1
jmstemplate ×1
messaging ×1
mom ×1
msmq ×1
rabbitmq ×1
rest ×1
spring ×1
ubuntu ×1