zhuchenghaoma 2013-08-27
定时读取特定文件的rss文件:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:atom="http://www.mulesoft.org/schema/mule/atom"
xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns:file="http://www.mulesoft.org/schema/mule/file"
xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/atom http://www.mulesoft.org/schema/mule/atom/current/mule-atom.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd">
<flow name="feedconcumes">
<file:inbound-endpoint path="/e:/upload/data" pollingFrequency="1000" />
<file:filename-wildcard-filter pattern="*.atom"/>
<atom:feed-splitter/>
</flow>
</mule>定时读取特定网址的新rss信息:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:atom="http://www.mulesoft.org/schema/mule/atom"
xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns:test="http://www.mulesoft.org/schema/mule/test"
xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/atom http://www.mulesoft.org/schema/mule/atom/current/mule-atom.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/test http://www.mulesoft.org/schema/mule/test/current/mule-test.xsd">
<flow name="feedConsumer">
<poll frequency="1000">
<http:outbound-endpoint address="http://topmanopensource.iteye.com/rss" method="GET"/>
</poll>
<atom:feed-splitter/>
</flow>
</mule>jms将消息发送特定的组件
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:atom="http://www.mulesoft.org/schema/mule/atom"
xmlns:jms="http://www.mulesoft.org/schema/mule/jms"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:test="http://www.mulesoft.org/schema/mule/test"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/atom http://www.mulesoft.org/schema/mule/atom/current/mule-atom.xsd
http://www.mulesoft.org/schema/mule/jms http://www.mulesoft.org/schema/mule/jms/current/mule-jms.xsd
http://www.mulesoft.org/schema/mule/test http://www.mulesoft.org/schema/mule/test/current/mule-test.xsd">
<jms:activemq-connector name="jmsConnectorNoRedelivery" maxRedelivery="-1" />
<spring:beans>
<spring:bean id="feedConsumer" class="com.easyway.esb.mule.rss.FeedReceiver" />
<spring:bean id="entryReceiver" class="com.easyway.esb.mule.rss.EntryReceiver" />
</spring:beans>
<flow name="feedConsumerFlow">
<jms:inbound-endpoint queue="feed.in" connector-ref="jmsConnectorNoRedelivery"/>
<component>
<spring-object bean="feedConsumer"/>
</component>
</flow>
<flow name="feedSplitterConsumerFlow">
<jms:inbound-endpoint queue="feed.split.in" connector-ref="jmsConnectorNoRedelivery">
<atom:feed-splitter/>
</jms:inbound-endpoint>
<component>
<spring-object bean="entryReceiver"/>
</component>
</flow>
</mule>package com.easyway.esb.mule.rss;
import org.mule.api.annotations.expressions.Expr;
import org.mule.api.annotations.param.Payload;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.abdera.model.Entry;
import org.apache.abdera.model.Feed;
public class EntryReceiver
{
private AtomicInteger receivedEntries = new AtomicInteger(0);
public void processEntry(@Payload Entry entry, @Expr("#[header:invocation:feed.object]") Feed feed) throws Exception
{
System.out.println("Received " + receivedEntries.incrementAndGet() + " of " + feed.getEntries().size() + " entries");
}
public int getCount()
{
return receivedEntries.get();
}
public AtomicInteger getReceivedEntries()
{
return receivedEntries;
}
}package com.easyway.esb.mule.rss;
import org.mule.api.annotations.param.Payload;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.abdera.model.Feed;
public class FeedReceiver
{
private final AtomicInteger receivedEntries = new AtomicInteger(0);
public void processFeed(@Payload Feed feed) throws Exception
{
receivedEntries.set(0);
System.out.println("Received " + feed.getEntries().size() + " events");
receivedEntries.set(feed.getEntries().size());
}
public int getCount()
{
return receivedEntries.get();
}
public AtomicInteger getReceivedEntries()
{
return receivedEntries;
}
}测试类:
import java.io.File;
import java.io.InputStream;
import java.io.StringReader;
import org.apache.commons.io.FileUtils;
import org.mule.api.MuleContext;
import org.mule.api.client.MuleClient;
import org.mule.api.context.MuleContextFactory;
import org.mule.config.spring.SpringXmlConfigurationBuilder;
import org.mule.context.DefaultMuleContextFactory;
public class MuleJmsAtomMain {
public static void main(String[] args) {
try {
String configFile = "jms-atom-consume.xml";
System.setProperty("mule.verbose.exceptions","true");
String[] configFileArr = new String[] {configFile };
MuleContextFactory muleContextFactory = new DefaultMuleContextFactory();
MuleContext muleContext = muleContextFactory
.createMuleContext(new SpringXmlConfigurationBuilder(configFileArr));
muleContext.start();
MuleClient client = muleContext.getClient();
FeedReceiver component = (FeedReceiver)muleContext.getRegistry().get("feedConsumer");
String path=MuleJmsAtomMain.class.getClassLoader().getResource("./sample-feed.atom").getFile();
String feed=FileUtils.readFileToString(new File(path));
client.dispatch("jms://feed.in", feed, null);
Thread.sleep(2000);
System.out.println(component.getCount());
client = muleContext.getClient();
component = (FeedReceiver)muleContext.getRegistry().get("feedConsumer");
component.getReceivedEntries().set(0); //reset since the build reports that it's getting incremented someplace else
client.dispatch("jms://feed.split.in", feed, null);
Thread.sleep(5000);
System.out.println(component.getCount());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}