该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-09-19
grantbb 写道 为什么要依赖:org.apache.xbean.spring.context.v2.XBeanNamespaceHandler
找了半天这个jar activeMq依赖于 xbean-spring.jar |
|
返回顶楼 | |
发表时间:2008-09-19
tzb2008 写道 这一行是初始化spring容器
你先确定在这一行有没有添加断点, 如果是用eclipse,clean一下project再运行试试看。 ListableBeanFactory lsb = new ClassPathXmlApplicationContext("classpath:com/andyao/activemq/applicationContext-activemq.xml"); GenericBeanFactoryAccessor gba = new GenericBeanFactoryAccessor(lsb); 我在这两行都设置断点了,按了F8就是不能到达下个断点,我用得是myeclipse,也按照你得做法做了就是不能继续往下走 直接run看看, 不要debug。 |
|
返回顶楼 | |
发表时间:2008-09-22
多谢楼主,终于实现了两个应用之间的消息通讯,这个问题困扰我很久了,一直不得其解,真的是感觉不尽啊!activemq官网上说支持多种语言,不知楼主是否知道c++与java之间如何通过activemq通讯呢
|
|
返回顶楼 | |
发表时间:2008-10-17
已经通过楼主的贡献代码,调试通过!谢谢!
但我还有一点不明白,楼主的listener包是要干什么用呢? |
|
返回顶楼 | |
发表时间:2008-10-20
zhanglongsr 写道 已经通过楼主的贡献代码,调试通过!谢谢!
但我还有一点不明白,楼主的listener包是要干什么用呢? spring的事件机制 |
|
返回顶楼 | |
发表时间:2008-10-30
andyao 写道 philyes 写道 A应用
<amq:broker useJmx="false" persistent="true"> <amq:persistenceAdapter> <amq:amqPersistenceAdapter directory="d:/amq"/> </amq:persistenceAdapter> <amq:transportConnectors> <amq:transportConnector uri="tcp://localhost:0" /> </amq:transportConnectors> </amq:broker> <amq:connectionFactory id="jmsConnectionFactory" brokerURL="vm://localhost" /> <!-- 使用Queue方式--> <amq:queue name="QUEUE" physicalName="JMS-TEST-QUEUE" /> <!-- Spring JmsTemplate config --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory"> <!-- lets wrap in a pool to avoid creating a connection per send --> <bean class="org.springframework.jms.connection.SingleConnectionFactory"> <property name="targetConnectionFactory" ref="jmsConnectionFactory" /> </bean> </property> <!-- custom MessageConverter --> <property name="messageConverter" ref="defaultMessageConverter" /> </bean> <!-- converter --> <bean id="defaultMessageConverter" class="com.andyao.activemq.DefaultMessageConverter" /> <bean id="queueMessageProducer" class="com.andyao.activemq.QueueMessageProducer"> <property name="template" ref="jmsTemplate" /> <property name="destination" ref="QUEUE" /> </bean> B应用 <amq:connectionFactory id="jmsConnectionFactory" brokerURL="vm://localhost" /> <amq:queue name="QUEUE" physicalName="JMS-TEST-QUEUE" /> <bean id="queueConsumer" class="com.andyao.activemq.QueueConsumer" /> <bean id="queueListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter"> <constructor-arg ref="queueConsumer" /> <!-- may be other method --> <property name="defaultListenerMethod" value="receive" /> <!-- custom MessageConverter define --> <property name="messageConverter" ref="defaultMessageConverter" /> </bean> <!-- converter --> <bean id="defaultMessageConverter" class="com.andyao.activemq.DefaultMessageConverter" /> <bean id="queueListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="jmsConnectionFactory" /> <property name="destination" ref="QUEUE" /> <property name="messageListener" ref="queueListener" /> </bean> 启动tomcat时,出现如下信息 信息: ActiveMQ JMS Message Broker (localhost, ID:6b184e6c407c476-1632-1221635612890-0:0) started(此应是是A应用 brokerID) 2008-9-17 15:13:34 org.springframework.web.context.ContextLoader initWebApplicationContext ...... 信息: ActiveMQ JMS Message Broker (localhost, ID:6b184e6c407c476-1642-1221635632312-0:0) started 2008-9-17 15:13:53 org.apache.activemq.broker.TransportConnector start 信息: Connector vm://localhost Started(此应是是B应用 brokerID) ....... 我在通过页面得提交给一个servlet一个信息,如123,在servlet调用如下代码 String text = request.getParameter("text"); FooMessage foo = new FooMessage(); int msg = Integer.parseInt(text); foo.setId(msg); System.out.println("********start send*********"); WebApplicationContext ctx=WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext()); QueueMessageProducer sender = (QueueMessageProducer)ctx.getBean( "queueMessageProducer"); sender.send(foo); System.out.println("******end send ***********"); 结果显示 ********start send********* queue send start 2008-9-17 15:14:16 org.apache.activemq.broker.TransportConnector start 信息: Connector vm://localhost Started 2008-9-17 15:14:16 org.springframework.jms.connection.SingleConnectionFactory initConnection 信息: Established shared JMS Connection: ActiveMQConnection {id=ID:6b184e6c407c476-1632-1221635612890-2:0,clientId=null,started=false} queue send end ******end send *********** B应用没有接收到,这是为什么,B应用的配置对吗,对的话为什么broker是两个不同的id,又为什么收不到A的消息呢,恳请楼主指点 A,B没有链接同一个activeMq A 中改为 <amq:transportConnector uri="tcp://localhost:61616" /> B 中 <amq:connectionFactory id="jmsConnectionFactory" brokerURL="vm://localhost" /> 改为 <amq:connectionFactory id="jmsConnectionFactory" brokerURL="tcp://localhost:61616" /> 前面你也说到 transportConnector是定義鏈接activeMQ的brokerURL. 你可以為一個activeMQ server指定多個transportconnector, 比如vm, tcp, ssl, stomp, xmpp等. 那我A多定义几个,B是不是也有不同的brokerURL?那他们又是怎么链接同一个activeMq? |
|
返回顶楼 | |
发表时间:2009-02-03
楼主你好,我看了你的例子,完全可以跑通,我改了下,现有A,B2个web应用系统,都起在一个web服务器(tomcat)下,A应用作为producer,B应用consumer,现在可以看到A应用发的消息,但是在B应用怎么看到已经得到或没有得到这个消息呢?有些不明白怎么处理,我不知道我这样写对不对,请指教,配置如下:
A应用:applicationContext-activemq.xml <amq:broker useJmx="false" persistent="true"> <amq:persistenceAdapter> <amq:amqPersistenceAdapter directory="c:/amq"/> </amq:persistenceAdapter> <amq:transportConnectors> <amq:transportConnector uri="tcp://localhost:0" /> </amq:transportConnectors> </amq:broker> <!-- 连接外部的activeMQ --> <amq:connectionFactory id="jmsConnectionFactory" brokerURL="tcp://localhost:61616" /> <!-- ActiveMQ destinations --> <!-- 使用topic方式--> <amq:topic name="TOPIC" physicalName="JMS-TEST-TOPIC" /> <!-- Spring JmsTemplate config --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory"> <!-- lets wrap in a pool to avoid creating a connection per send --> <bean class="org.springframework.jms.connection.SingleConnectionFactory"> <property name="targetConnectionFactory" ref="jmsConnectionFactory" /> </bean> </property> <!-- custom MessageConverter --> <property name="messageConverter" ref="defaultMessageConverter" /> </bean> <!-- converter --> <bean id="defaultMessageConverter" class="com.me.jms.DefaultMessageConverter" /> <!-- POJO which send Message uses Spring JmsTemplate --> <bean id="topicMessageProducer" class="com.me.jms.TopicMessageProducer"> <property name="template" ref="jmsTemplate" /> <property name="destination" ref="TOPIC" /> </bean> A应用producer public class TopicMessageProducer { private JmsTemplate template; private Topic destination; public void setTemplate(JmsTemplate template) { this.template = template; } public void setDestination(Topic destination) { this.destination = destination; } public void send(TestBean message) { System.out.println("=====> message send! "); template.convertAndSend(this.destination, message); } } A应用中的Action public class TestAction extends ActionSupport{ private TestBean tb; private TopicMessageProducer topicMessageProducer; public String test(){ System.out.println("===> username:" + tb.getUserName()); System.out.println("===> username:" + tb.getPassWord()); topicMessageProducer.send(tb); return "success"; } ...geter(),seter(); } B应用applicationContext-activemq.xml <amq:connectionFactory id="jmsConnectionFactory" brokerURL="tcp://localhost:61616" /> <amq:topic name="TOPIC" physicalName="JMS-TEST-TOPIC" /> <!-- converter --> <bean id="defaultMessageConverter" class="com.me.jms.DefaultMessageConverter" /> <!-- Message Driven POJO (MDP) --> <!-- consumer1 for topic a --> <bean id="topicConsumerA" class="com.me.jms.TopicConsumerA" /> <!-- consumer2 for topic a --> <bean id="topicConsumerB" class="com.me.jms.TopicConsumerB" /> <!-- Message Listener for --> <bean id="topicListenerA" class="org.springframework.jms.listener.adapter.MessageListenerAdapter"> <constructor-arg ref="topicConsumerA" /> <!-- may be other method --> <property name="defaultListenerMethod" value="receive" /> <!-- custom MessageConverter define --> <property name="messageConverter" ref="defaultMessageConverter" /> </bean> <bean id="topicListenerB" class="org.springframework.jms.listener.adapter.MessageListenerAdapter"> <constructor-arg ref="topicConsumerB" /> <!-- may be other method --> <property name="defaultListenerMethod" value="receive" /> <!-- custom MessageConverter define --> <property name="messageConverter" ref="defaultMessageConverter" /> </bean> <!-- listener container,MDP无需实现接口 --> <bean id="topicListenerContainerA" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="jmsConnectionFactory" /> <property name="destination" ref="TOPIC" /> <property name="messageListener" ref="topicListenerA" /> </bean> <bean id="topicListenerContainerB" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="jmsConnectionFactory" /> <property name="destination" ref="TOPIC" /> <property name="messageListener" ref="topicListenerB" /> </bean> B应用的consumerA和consumerB都一样 public class TopicConsumerA { public void receive(TestBean message) { System.out.println("************************************** Topic A userName: " + message.getUserName()); System.out.println("************************************** Topic A passWord: " + message.getPassWord()); } } 目前是在tomcat控制台和http://127.0.0.1:8161/admin/中可以看消息已发送了,但是在tomcat控制台中和http://127.0.0.1:8161/admin/上看不到是否已经接受到了消息,我该如何查看或修改,谢谢!!! |
|
返回顶楼 | |
发表时间:2009-02-05
http://127.0.0.1:8161/admin/这个界面中你可以查看queue和topic的信息列表
Name topic或者queue的名字 Number Of Pending Messages pend消息的数目 Number Of Consumers 消费者的数目 Messages Sent 发送的消息数目 Messages Received 接收的消息数目 你要看有多少消息被接受了, 看Messages Received 条目 |
|
返回顶楼 | |
发表时间:2009-02-05
谢谢楼主,已解决,原因是我的TestBean忘了序列化接口(我用了defaultMessageConvertor),在我加上LOG后才发现问题,实现了序列化接口就好了,谢谢!!
|
|
返回顶楼 | |
发表时间:2009-05-20
博主你好,
我怎么在http://127.0.0.1:8161/admin/topics.jsp中看不到JMS-TEST-TOPIC消息传递的效果呢,消息数量和名称等都看不到 附加本例子所需要的jar包 activemq-all-5.2.0.jar commons-logging-1.1.jar log4j-1.2.14.jar spring2.5.5.jar xbean-spring-2.8.jar(2.8以上) jdk jee 这些jar包都可以在activemq的解压包中找到 |
|
返回顶楼 | |