我的任务是为JMS客户评估ActiveMQ Artemis.我有RabbmitMQ经验,但没有使用ActiveMA Artemis/JMS.
我在我的本地机器上安装了Artemis,根据说明创建了一个新的代理,并将其设置为Windows服务.Windows服务启动和停止就好了.我没有对broker.xml文件进行任何更改.
对于我的第一次测试,我正在尝试从独立的Java程序执行JMS Queue生成/使用.我正在使用"使用JMS"部分中的Artemis用户手册中的代码(不使用JNDI):
TransportConfiguration transportConfiguration = new TransportConfiguration(NettyConnectorFactory.class.getName());
ConnectionFactory cf = ActiveMQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType.CF,transportConfiguration);
Queue orderQueue = ActiveMQJMSClient.createQueue("OrderQueue");
Connection connection = cf.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(orderQueue);
MessageConsumer consumer = session.createConsumer(orderQueue);
connection.start();
TextMessage message = session.createTextMessage("This is an order");
producer.send(message);
TextMessage receivedMessage = (TextMessage)consumer.receive();
System.out.println("Got order: " + receivedMessage.getText());
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我收到以下错误:
警告:AMQ212054:目标地址= jms.queue.OrderQueue被阻止.如果系统配置为阻止,请确保使用此配置上的消息.
如果这是服务器端设置,或者生产者发送没有阻塞,我的研究还没有定论.我一直无法找到一个具有阻塞布尔值的生成器发送方法,只有持久性.关于在哪里集中注意力的想法?
编辑:添加到专用于此队列的broker.xml的新地址设置元素:
<address-setting match="jms.queue.OrderQueue">
<max-size-bytes>104857600</max-size-bytes>
<page-size-bytes>10485760</page-size-bytes>
<address-full-policy>PAGE</address-full-policy>
</address-setting>
Run Code Online (Sandbox Code Playgroud) 我的任务是升级一个大型服务类型的java程序(不是我写的,第一次接触它),它有大量的开源库。我正在升级到 log4j2,它以前有 log4j,但我不知道它是否可以正常工作。
我根本没有收到日志文件。这是在使用 NetBeans 8 的本地开发环境中。我的类路径中有 log4j-api 和 log4j-core 2.9.0 文件。我的项目根目录中的 log4j2.xml 文件是:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="FileAppender" fileName="DistEngine.log" immediateFlush="true" append="false" >
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Root level="ALL">
<AppenderRef ref="FileAppender"/>
<AppenderRef ref="Console"/>
</Root>
</Loggers>
Run Code Online (Sandbox Code Playgroud)
类日志记录变量是(是的,类名是 Main,它扩展了父类):
private static final Logger MAINLOGGER = LogManager.getLogger(Main.class);
Run Code Online (Sandbox Code Playgroud)
该起始类的 main() 方法中的第一行是:
MAINLOGGER.info("entering listener main");
Run Code Online (Sandbox Code Playgroud)
我没有在项目根目录中获取 DistEngine.log 文件,也没有从 log4j2 到 stdout 的任何日志记录。我没有收到 log4j2 消息,指出它找不到配置文件。
配置文件、类变量和日志调用都是从该集合中的另一个程序复制的,其中日志记录工作正常。 …
我需要查询 Sharepoint 2013 文档库并检索列表中字段值等于特定值的所有文档。我为此使用 Sharepoint 2013 CSOM 客户端 (Microsoft.SharePoint.Client)。
我可以使用以下代码成功检索除文档 URL 之外的所有 ListItem 字段:
ClientContext spContext = new ClientContext(spDocLibSite);
List cjList = spContext.Web.Lists.GetByTitle(spDocLibTitle);
CamlQuery listItemQuery = CamlQuery.CreateAllItemsQuery(100);
listItemQuery.ViewXml = "ViewXml that limits ListItems returned based on a field val";
ListItemCollection docItems = cjList.GetItems(listItemQuery);
spContext.Load(docItems);
spContext.ExecuteQuery();
foreach (ListItem listItem in docItems)
{
Console.WriteLine(listItem["Title"]); // Works correctly with all fields except URL
listItem.File.Name or Title; // Does not work, get field not initialized error
}
Run Code Online (Sandbox Code Playgroud)
文件属性似乎没有有关文档的任何数据,当我尝试访问其属性时出现错误。
我没有设置这个文档库,但它似乎是标准的,每个列表项都有一个文档,以及大约十几个包含有关该文档的各种信息的字段。如果我查看库/列表的字段列表,文档/URL 甚至没有被列为字段。我能否以某种方式从我已经检索的 ListItem 类中获取文档的 URL?谢谢。